如何通过跳板机从本地直接SSH访问仅可由跳板机寻址的服务器
如何通过跳板机从本地直接SSH访问仅可由跳板机寻址的服务器
没问题,这其实是SSH跳转访问的典型场景,咱们分两种方式来解决:直接用命令行快速连接,或者配置本地SSH config实现一键连接,而且完全不用把B上的keyC复制到本地A!
一、直接使用命令行连接
方式1:用ProxyJump(推荐,OpenSSH 7.4+支持)
直接在本地A的终端敲这条命令就行:
ssh -J userB@B.example.com userC@C.internal
-J参数就是指定跳板机,SSH会自动先建立到B的连接,再通过B的通道转发到C的连接。
方式2:用ProxyCommand(兼容旧版本SSH)
如果你的SSH版本比较老,不支持ProxyJump,就用这条:
ssh -o ProxyCommand="ssh -W %h:%p userB@B.example.com" userC@C.internal
ProxyCommand的作用是让本地通过B的SSH会话,把连接请求转发到C的SSH端口。
关于密钥的关键说明
这里不需要复制B上的~/.ssh/keyC到本地!因为连接C的操作是在跳板机B的环境里执行的,SSH会自动调用B上的密钥文件去验证C的登录,本地A只需要能连上B就行。
二、配置本地SSH Config实现一键连接
如果需要经常连C,把配置写到本地A的~/.ssh/config里,以后直接敲ssh C就能连上,更省心。
修改后的完整配置如下:
Host B User userB HostName B.example.com IdentityFile ~/.ssh/keyB Host C User userC HostName C.internal # 新版本用ProxyJump ProxyJump B # 旧版本替换成下面这行(二选一) # ProxyCommand ssh -W %h:%p B
配置说明
- 保留原来B的配置不变;
- 给C新增的
ProxyJump B(或旧版本的ProxyCommand)指定通过B跳转; - 不需要给C加
IdentityFile,因为连接时会复用B上的密钥,完全不用把keyC弄到本地。
配置好之后,直接在本地终端输入:
ssh C
就能自动完成从A→B→C的跳转登录,全程不用手动切换跳板机,也不用碰B上的密钥文件。
备注:内容来源于stack exchange,提问作者Teddy C




