惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Securelist
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
Spread Privacy
Spread Privacy
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
博客园_首页
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
O
OpenAI News
J
Java Code Geeks
T
Tenable Blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
T
Threatpost
月光博客
月光博客
H
Heimdal Security Blog
Security Latest
Security Latest
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
D
Docker
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
V
Visual Studio Blog
H
Help Net Security

博客园 - 哈喽哈喽111111

MySQL使用自带的logrotate配置日志轮转 yum方式安装redis7 nacos新加用户操作 网络运营商禁止端口信息 Linux开机启动rc.local不生效的一般解决方案 Nginx流量拷贝ngx_http_mirror_module模块使用方法详解 Adobe 修改 hosts 文件 axios 投毒与好莱坞式骗术 Linux系统在使用systemctl启动服务的失败,报错如下:Error No space left on device git submodule 的增、查、改、删 Rocky Linux 安装 Google Chrome 浏览器 “头号玩家”—— 美国技术霸权下的全球虚拟货币资产收割行动深层解析 你是第几级 AI 编程 MySQL中通过关联update将一张表的一个字段更新到另外一张表中 Linux 的 Port Knocking 端口碰撞(端口敲门) MySQL解除死锁 jar文件解压缩操作 设置Windows服务器远程桌面能使用多个桌面 20251024- 使用shell脚本分库定时备份MySQL数据 禁用sentinel 在 Linux 中安装和配置 NTP 服务器和 NTP 客户端 springboot配置文件关系及加载顺序 用自带的Nginx为gitlab做白名单 Rocky9和Ubuntu使用pip安装python的库mysqlclient失败解决方式 在Spring Boot Admin中根据Nacos的命名空间来区分和管理不同的环境
RockyLinux SSH 跳板转发 3389(Windows 远程桌面)完整方案
哈喽哈喽111111 · 2026-06-24 · via 博客园 - 哈喽哈喽111111
RockyLinux SSH 跳板转发 3389(Windows 远程桌面)完整方案

两种常用模式:本地端口转发(你本地访问 Linux 跳板端口连 Windows)、远程端口转发(Windows 主动出网,跳板暴露端口),日常内网穿透用第一种。

前置条件
    RockyLinux 跳板机:公网 IP / 能被你本地 ssh 连接,开放 22 端口
    Windows 机器:和 RockyLinux 内网互通,开启 3389 远程桌面,防火墙放行 3389
    本地电脑:Windows/macOS/Linux,自带 ssh 客户端

方案 1:本地端口转发(最常用,推荐)
逻辑:本地开端口 → SSH 隧道连 RockyLinux → 跳板流量转发到内网 Windows:3389

命令(本地终端执行)

# 格式:ssh -L 本地端口:目标WindowsIP:3389 跳板用户名@RockyLinuxIP

# 示例:本地用3390端口访问,跳板ip 1.2.3.4,内网Windows 192.168.1.100
ssh -L 3390:192.168.1.100:3389 root@1.2.3.4

参数说明:

    -L 本地端口:WindowsIP:3389:本地监听端口,流量通过跳板转发到目标 3389
    3390 可自定义(避开占用端口,不要直接用 3389 防止冲突)

使用远程桌面

隧道保持终端不关闭,打开本地 mstsc 远程桌面:localhost:3390

即可连接内网 Windows 3389。

后台常驻隧道(断开终端不失效)
加 -Nf 参数后台运行:
ssh -NfL 3390:192.168.1.100:3389 root@1.2.3.4

    -N 不执行远程命令,只做转发
    -f 后台运行

关闭后台隧道
查询 ssh 进程并 kill:

ps aux | grep ssh
kill -9 进程PID

方案 2:远程转发(Windows 在内网,跳板公网暴露端口给别人访问)

逻辑:跳板机开放公网端口 → 流量转发到内网 Windows 3389

# -R 跳板端口:WindowsIP:3389
ssh -NfR 3391:192.168.1.100:3389 root@1.2.3.4

其他人访问 RockyLinux公网IP:3391 即可直连 Windows 桌面。

关键防火墙放行(RockyLinux 必须操作)
RockyLinux 默认 firewalld 拦截自定义端口,放行转发端口(示例 3390/3391)


# 放行端口
firewall-cmd --add-port=3390/tcp --permanent
firewall-cmd --add-port=3391/tcp --permanent

# 重载生效
firewall-cmd --reload

云服务器额外操作:服务商安全组放行对应端口(22、3390、3391)
优化:SSH 配置免密登录(不用输密码)
本地生成密钥传到跳板,避免每次输密码:

# 本地生成密钥(一路回车)
ssh-keygen
# 推送公钥到RockyLinux跳板
ssh-copy-id root@1.2.3.4

常见故障排查

    远程桌面连不上
        确认 Windows 防火墙放行 3389,开启远程桌面功能
        RockyLinux 防火墙 / 云安全组放行转发端口
        跳板机能 ping 通 Windows 内网 IP
    隧道报错端口占用
        更换本地端口(3390→3400 等)
    后台隧道断开
    增加保活参数防止掉线:

ssh -NfL 3390:192.168.1.100:3389 root@1.2.3.4 -o ServerAliveInterval=30 -o ServerAliveCountMax=3

补充:开机自启隧道(本地 Linux/macOS)
写入 systemd 服务或 crontab;Windows 本地可用 Xshell、FinalShell 图形化持久隧道。


场景 1:跳板机 SSH 服务不是默认 22 端口(连接 RockyLinux 要指定 ssh 端口)
用 -p 参数指定跳板 SSH 端口,放在命令任意位置,推荐放前面
标准语法

ssh -p 跳板SSH端口 -L 本地端口:Windows内网IP:3389 跳板用户@跳板公网IP

示例
跳板 RockyLinux ssh 端口改成 2222,跳板 IP 110.10.10.10,内网 Windows 192.168.5.20:3389,本地映射端口 3390

ssh -p 2222 -L 3390:192.168.5.20:3389 root@110.10.10.10

后台常驻保活完整版:

ssh -Nf -p 2222 -L 3390:192.168.5.20:3389 root@110.10.10.10 -o ServerAliveInterval=30 -o ServerAliveCountMax=3

场景 2:只是修改本地映射端口(跳板 SSH 还是 22)
只改 -L 第一个数字即可,无 -p

# 本地用5000端口访问RDP
ssh -L 5000:192.168.5.20:3389 root@110.10.10.10

场景 3:远程转发 - R(别人访问跳板端口连 Windows),跳板 SSH 非 22

ssh -Nf -p 2222 -R 6000:192.168.5.20:3389 root@110.10.10.10

他人访问 跳板IP:6000 连接 Windows 桌面,RockyLinux 防火墙需要放行 6000/tcp

二、SSH config 免输端口(永久配置推荐)
本地 ~/.ssh/config 写入配置,以后直接 ssh jump 不用打 -p

Host jump
  HostName 110.10.10.10
  User root
  Port 2222
  ServerAliveInterval 30

之后转发命令简化:

ssh -NfL 3390:192.168.5.20:3389 jump

三、配套防火墙操作(跳板改了 SSH 端口必做)

    RockyLinux 放行自定义 SSH 端口(2222 举例)

firewall-cmd --add-port=2222/tcp --permanent
firewall-cmd --reload

    云服务器安全组同步放行:跳板 SSH 端口 + 转发端口(3390/6000 等)

四、使用 RDP 连接
隧道建立后,mstsc 输入:localhost:3390


创建用户的时候可以使用不能登录Linux系统的用户

用 /usr/sbin/nologin 用户做 SSH 端口转发跳板,但必须加 -N 参数,否则一连接就断开;
这种用户不能交互式登录拿 shell,但单纯隧道转发完全不受影响,非常适合做专用跳板账号。

一、核心原理
    /usr/sbin/nologin 的作用:用户认证成功后,拒绝分配交互式 shell,直接提示账号不可用并断开连接。
    SSH 端口转发分两步:
        第一步:身份认证(成功即可)
        第二步:申请 shell / 执行命令 / 建立隧道
    加 -N 参数 = 只做认证、不请求远程 shell,sshd 不会去调用用户 shell,nologin 就不会触发断开,隧道正常维持。

正确 Windows PowerShell 隧道命令(必须带 -N)

# -N 关键:不请求远程shell,兼容nologin用户
ssh -N -L 13389:目标WindowsIP:3389 tunneluser@RockyLinuxIP

    不加 -N:连接成功后系统尝试启动 shell → nologin 拦截 → 连接瞬间关闭,隧道失效。

二、RockyLinux 创建专用 nologin 跳板用户完整步骤
1. 创建无登录 shell 用户

# 创建跳板用户,shell设为nologin,创建家目录(密钥存放用)
useradd -m tunneluser -s /usr/sbin/nologin

# 设置密码(推荐后续改用密钥登录,关闭密码认证)
passwd tunneluser

2. sshd 加固配置(只允许转发、禁止交互操作)
编辑 /etc/ssh/sshd_config,末尾添加:

# 匹配跳板用户单独限制
Match User tunneluser
    AllowTcpForwarding local   # 仅允许-L本地转发,禁止-R远程穿透
    PermitTTY no               # 禁止终端交互登录
    X11Forwarding no
    AllowAgentForwarding no
    PermitTunnel no
    ForceCommand echo "仅允许端口转发,禁止执行命令"

说明:
    AllowTcpForwarding local:只开放你需要的 -L 本地转发,杜绝反向隧道,更安全
    PermitTTY no:彻底禁止拿到终端,就算别人漏了 -N 也无法交互式操作跳板机

重载 sshd 生效:

systemctl restart sshd

三、两种客户端使用方式
1. Windows OpenSSH(PowerShell,推荐)

# 后台静默隧道(加-f后台运行,不用一直开窗口)
ssh -N -f -L 13389:192.168.5.10:3389 tunneluser@10.0.0.20

之后 mstsc 连接 127.0.0.1:13389 即可访问第二层 Windows。

2. Xshell / Putty 图形工具
    Putty:Connection → SSH 勾选 Don't start a shell or command at all(等价 -N)
    Xshell:隧道配置里关闭「远程命令执行」,仅启用本地端口转发

四、常见踩坑点

    不加 -N,隧道秒断
    报错类似:Access denied: This account is currently not available,就是 nologin 拦截 shell 导致。
    全局 AllowTcpForwarding no
    即使是 nologin 用户也无法转发,必须用 Match User tunneluser 单独放行 local。
    用户没家目录
    用密钥登录时 ssh-copy-id 会失败,创建用户必须加 -m。

五、安全优势(为什么推荐 nologin 跳板账号)

    账号无法 SSH 登录 RockyLinux 拿命令行,攻击者拿到密码也不能操作跳板服务器;
    配合密钥登录 + 禁止密码认证,最小权限,只保留端口转发能力;
    仅开放 -L 本地转发,无法利用跳板反向穿透内网其他机器。

补充:极简替代方案(不用 nologin)
如果不想配置限制,也可以用 /bin/false 做 shell,逻辑完全一致,同样需要 -N 参数:

usermod -s /bin/false tunneluser