SSH - Jump Server Configuration
本文介绍两种在 openssh 下方便地配置跳板机的方式。
ProxyCommand Option
通过 ~/.ssh/config 中配置 ProxyCommand
选项来实现跳板效果。
Configuration File
1 | ProxyCommand command |
Description
ssh 客户端在连接服务器之前会先使用 command 作为 exec 的参数启动一个进程,接下来把本该发往 ssh 服务器的流量发往该进程的标准输入,并将该进程的标准输出视作 ssh 服务器回复的流量。简单的来说就是通过新启动的进程来连接服务器。
选项的 command 参数支持使用标记符号(TOKEN),支持的符号如下:
TOKEN | Description |
---|---|
%h | 远程服务器地址或域名 |
%p | 远程服务器端口号 |
%r | 远程服务器用户名 |
%% | 字符 ‘%’ |
例如,设置 ProxyCommand nc %h %p
后, ssh [email protected] -p 22334
会在连接远程服务器之前启动进程 nc 1.2.3.4 22334
,再将 ssh 流量通过该进程的标准输入输出发送给远程服务器。在这个例子中 nc 并没有起到什么效果。但是通过设置不同的命令,可以通过该选项来实现跳板机机制。
Jump via ProxyCommand
假定跳板机的 ip 地址 1.2.3.4,端口为 12322,实际要连接的远程服务器为 10.0.0.1:23322。我们可以设置 ProxyCommand ssh -W %h:%p -p12322 [email protected]
。 -W
参数的说明可以见上一篇文章。为方便使用,我们可以在 ~/.ssh/config
中添加跳板机配置:
1 | Host jumpserver |
再添加跳板机后面的实际目标服务器:
1 | Host target |
注意 target 配置中的 ProxyCommand 字段使用了前面定义的 jumpserver 来简化配置。接下来可以直接在命令行中执行 ssh target
来一键通过跳板机连接远程服务器。
若想用临时配置,不想修改 ~/.ssh/config
文件,可以执行以下命令来连接远程服务器:
1 | ssh -o'ProxyCommand ssh -W %h:%p -p12322 [email protected]' -p23322 [email protected] |
ProxyJump Option
上述方式实现跳板机仍然有些复杂,在较新版本的 openssh(>=7.3) 中可以使用 -J
命令行参数或者 ProxyJump
配置来实现跳板机机制。
CLI Options
1 | ssh -J jump-host[[,jump-host]*] |
可以使用逗号来分割多个跳板机,ssh 会顺次通过跳板机来访问远程目标。
Configuration File
1 | ProxyJump jump-host[[,jump-host]*] |
同样可以使用逗号来分割多个跳板机。
Jump via ProxyJump
通过该选项可以方便地配置跳板机,假设跳板机和目标的信息和前述例子中的一样。
在 ~/.ssh/config
中添加跳板机配置:
1 | Host jumpserver |
再添加目标服务器配置:
1 | Host target |
现在即可在命令行中执行 ssh target
连接目标服务器。
若想临时通过跳板机 jumpserver
连接某台新服务器 [email protected]:23333
,可以通过在命令行中执行 ssh -J jumpserver -p23333 [email protected]
来连接。