SSH跳转另一台服务器,最简单直接的方法是用ssh 用户名@IP地址命令直连,但在生产环境中,更推荐用跳板机(堡垒机)方案,既安全又方便审计。这个操作也叫SSH隧道登录、SSH代理跳转,本质上是让本地机器通过一台中间服务器,去连接目标内网服务器。
你不需要记住复杂的原理,只需要把下面这几个命令和配置思路吃透,就能应对绝大多数跳转场景。
ssh跳转命令怎么写?先分清直连与跳板
很多新手一开始会混淆“直接登录”和“跳转登录”,直连是本地到目标机器只有一条链路;跳转则是本地→跳板机→目标机器,中间多了一道转发,搞清楚这一点,后面遇到什么“ssh怎么跳转到另一台服务器”的搜索问题,你心里就有底了。
普通直连:一条命令搞定
如果你有一台公网IP的服务器,或者两台机器在同一个内网,直接输入:
ssh -p 22 root@192.168.1.10
-p指定端口,默认是22可以省略。root是目标机器上的用户名,输入密码后你就登录进去了,这是最基础的用法,后面的跳转都是在这个基础上叠加参数。
两种跳板方式:-J参数和ProxyCommand
日常运维中,最常见的跳转场景就是:你的电脑没法直接访问目标服务器,但有一台跳板机可以,这里有两种主流玩法。
-J参数(推荐,OpenSSH 7.3以上版本都支持)
ssh -J user@跳板机IP user@目标IP
比如跳板机是100.10.1,目标机器是168.1.20,密码都是123456(仅示例),命令就写成:
ssh -J root@39.100.10.1 root@192.168.1.20
执行后,系统会先让你输跳板机密码,再输目标机器密码,全部通过才能登进去,这个过程叫SSH隧道自动转发,-J参数会自动帮你把流量从本地转发到跳板机,再由跳板机转发到目标机器。
ProxyCommand参数(老版本或者特殊场景用)
ssh -o ProxyCommand="ssh -W %h:%p root@跳板机IP" root@目标IP
这条命令的原理是:先通过-W
参数打通本地到跳板机的通道,再把目标IP和端口传进去,用起来比-J繁琐,但兼容性更好,某些老系统必须要用这个。
多级跳转和文件传输:实战中的高频场景
单级跳转会了,多级跳转就是一个道理叠加,假设你要访问的服务器在一个非常深的网络环境里,本地→A服务器→B服务器→目标机器,三层跳转怎么搞?
多级跳转:-J参数后面跟逗号
ssh -J user@A服务器IP,user@B服务器IP user@目标IP
注意逗号之间不要有空格,执行时同样要依次输入所有中间机器的密码,这里多说一句,如果中间机器的端口不是默认的22,格式要改成user@IP:端口号。这种链式写法在批量运维机器时很实用,你只需要一条命令,不用手动先登A再登B那么麻烦。
用SCP通过跳板机传文件
很多人知道scp传文件,但不知道加了跳板机之后怎么写,其实就是在scp命令里加上-o ProxyCommand或者-J参数。
用-J最简单:
scp -J root@跳板机IP ./local_file.txt root@目标IP:/root/
这条命令的意思是把当前目录的local_file.txt传到目标机器的/root/目录下,执行时同样需要输入密码。这个场景在远程部署代码或备份日志时特别常用,不用先下载到本地再上传那么笨拙。
端口转发:让本地也能访问远端内网服务
有时候你不想登录目标服务器,只想让本地浏览器能访问目标服务器上的某个Web服务,比如MySQL的3306端口或Nginx的80端口,这时用本地端口转发:
ssh -L 3306:目标IP:3306 root@跳板机IP
执行后,本地访问0.0.1:3306就相当于访问目标服务器的3306端口,这个功能叫SSH本地端口转发,是隧道跳转的重要补充。
ssh跳板机连服务器:如何用配置文件简化日常操作
每次都敲一长串命令,输三遍密码,说实话挺烦的,老手一般会把常用的跳转信息写进~/.ssh/config文件,之后只需要输入一个别名就能一键登录。
配置config文件,实现一键跳转
在本地机器上编辑~/.ssh/config(没有就新建一个),写进下面这段:
Host jump
HostName 跳板机IP
User root
Port 22
Host target
HostName 192.168.1.20
User root
ProxyJump jump
保存后,你只需要在终端输入:
ssh target
系统就会自动先走跳板机jump,再连目标机器target,非常简洁。
用这个文件还能解决一个很多人头疼的问题:每次都要输密码,你只需在本地生成一对密钥,然后把公钥分别追加到跳板机和目标机器的~/.ssh/authorized_keys里,以后就不用再输密码了。
生成密钥:
ssh-keygen -t rsa -b 4096
复制公钥到跳板机:
ssh-copy-id jump
再复制公钥到目标机器:
ssh-copy-id target
这里有个常见的坑,如果你直接ssh-copy-id target,系统会发现目标机器没配置跳板,会失败,正确的做法是先用ssh-copy-id jump登录跳板机,然后在跳板机上用同样的方式把公钥追加到目标机器,或者通过ssh-copy-id -o ProxyJump=jump target一次搞定。密钥登录后,运维效率的提升是立竿见影的,省去了大量输入密码的时间。
跳板机和直连的区别,到底选哪个
行业共识认为,跳板机方案在生产环境中是更稳妥的选择,直连虽然快,但意味着每台服务器都暴露在公网上,容易被扫描和爆破,跳板机把入口收敛到一个点上,所有登录行为都有日志,出了问题能溯源。
对比一下:
| 维度 | 直接SSH连接 | 跳板机方案 |
|---|---|---|
| 安全性 | 每台服务器暴露公网,风险大 | 只有跳板机暴露,内网机器不直接面对公网 |
| 审计能力 | 无统一日志,操作难追溯 | 可在跳板机统一记录操作日志 |
| 运维成本 | 每台机器单独维护账号 | 集中管理账号权限 |
| 登录效率 | 一条命令直达,效率高 | 多一层跳转,略慢但可接受 |
直连适合个人测试、临时快速登录的场景;跳板机适合公司环境、多服务器管理的场景。如果你的服务器数量超过三台,并且有同事协同操作,配置一个跳板机是值得的。
跳转失败排查:大多数问题出在密码和权限上
你敲了命令,结果卡住或者报错,别慌,多数情况下是下面几个原因。
密码报错Permission denied
这说明密码错了,或者目标机器没开密码登录,检查一下/etc/ssh/sshd_config里PasswordAuthentication是不是yes,改完记得systemctl restart sshd。
连接超时Connection timed out
目标机器或跳板机的防火墙没放行22端口,在云服务器控制台的安全组规则,以及服务器自身的iptables或firewalld里确认端口是通的。
跳板机上不去
先单独测一下跳板机能不能登入,排除跳板机本身的问题,有时候是跳板机的端口不是22,或者公网IP变了,这需要和负责网络的同事确认。
把ssh -J和~/.ssh/config这两个工具用熟,你就能在本地顺畅地跳转访问任何一台内网服务器,文件的拷贝和远端服务的访问也随之解决,核心思路就一句话:选对直连或跳板方式,用配置文件减少重复输入,剩下的交给时间和成功日志来验证。
SSH跳转服务器的常见问题
问:ssh跳转命令可以用在Windows上吗?
答: 可以,Windows 10及以上版本自带的OpenSSH客户端原生支持-J参数和~/.ssh/config配置文件,操作方式和Linux/Mac一致,老版本Windows可以用PowerShell的ssh命令或安装第三方工具实现。
问:跳板机的密码和目标服务器的密码必须一样吗?
答: 不需要一样,跳转过程中系统会分别提示输入每一台机器的登录凭证,密码可以各不相同,但如果每台机器密码都不一样,建议配置密钥认证省去逐次输入的麻烦,行业内也普遍认为密钥登录比密码登录更安全可靠。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/669316.html





