如何通过跳板机B直接连接服务器C?SSH输入传递问题
无需手动输入IP,直接通过跳板机连接目标服务器的方法
针对客户端A→跳板机B→服务器C的连接场景,以下几种方法可实现无手动输入的直接连接:
方法1:SSH原生跳转命令(推荐,OpenSSH 7.3+支持)
利用-J参数(ProxyJump)一键完成跳转,命令格式:
ssh -J <跳板机用户名>@<跳板机地址> <目标服务器用户名>@<目标服务器C的IP>
示例:
ssh -J bob@jump.example.com alice@192.168.1.100
该命令会自动先连接跳板机B,再从B转发连接到服务器C,全程无需手动输入任何信息。
方法2:旧版SSH代理命令(适配OpenSSH 7.3以下版本)
若SSH版本较低不支持-J参数,可使用ProxyCommand参数:
ssh -o ProxyCommand="ssh -W %h:%p <跳板机用户名>@<跳板机地址>" <目标服务器用户名>@<目标服务器C的IP>
示例:
ssh -o ProxyCommand="ssh -W %h:%p bob@jump.example.com" alice@192.168.1.100
方法3:适配跳板机B的交互式IP输入场景
如果跳板机B登录后强制要求手动输入C的IP才能连接(比如跳板机有自定义脚本),可通过输入重定向自动传递IP:
方式A:Here-String传递输入
ssh -t <跳板机用户名>@<跳板机地址> 'read ip; ssh <目标服务器用户名>@$ip' <<< "<目标服务器C的IP>"
方式B:管道传递输入
echo "<目标服务器C的IP>" | ssh -t <跳板机用户名>@<跳板机地址> 'read ip; ssh <目标服务器用户名>@$ip'
其中-t参数强制分配伪终端,确保跳板机的交互式脚本能正常读取输入;read ip用于捕获传递的IP,再执行后续SSH连接命令。
额外优化:免密登录配置
若不想每次输入密码,可配置SSH密钥转发:
- 将客户端A的公钥(
~/.ssh/id_rsa.pub)添加到跳板机B的~/.ssh/authorized_keys文件中 - 将跳板机B的公钥添加到服务器C的
~/.ssh/authorized_keys文件中 - 连接时添加
-A参数开启代理转发:
ssh -A -J <跳板机用户名>@<跳板机地址> <目标服务器用户名>@<目标服务器C的IP>
全程无需输入密码,连接体验更顺畅。
内容的提问来源于stack exchange,提问作者oka96
相关产品推荐
相关产品推荐

