You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过跳板机从本地直接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

火山引擎 最新活动