SSH跳板机访问内网机器及其免密登录

由于项目部署的P4交换机与工位主机在同一内网内,且工位主机和本人笔记本通过tailscale虚拟组网功能可以相互访问,因此为了便于外网的笔记本可以随时SSH连接到内网的交换机设备,需要设置工位主机作为跳板机,完成本机 -> 跳板机 -> 内网交换机的SSH访问。

ProxyJump

需要OpenSSH版本高于7.3才能使用ProxyJump,其使用方法如下:

1
ssh target_username@target_ip -p target_port -J jump_username@jump_ip:jump_port

其中target_usernamejump1_username分别为目标主机和跳板机的ip地址,target_ipjump_ip分别为目标主机和跳板机的ip地址或域名,target_portjump_port分别为目标主机和跳板机的ssh服务器端口号,端口号22时可以默认省略。

当存在多个跳板时,可以通过在 -J选项后以,分割多个username@ip:port来实现,即

1
ssh target_username@target_ip -p target_port -J jump_username1@jump_ip1:jump_port1,jump_username2@jump_ip2:jump_port2

存在多个跳板机时,访问顺序为local -> jump1 -> jump2 -> … -> server。

为了能够简化命令,可以通过在~/.ssh/config中加入以下配置:

config
1
2
3
4
5
6
7
8
9
10
Host jump   # 为跳板机自定义简称
HostName jump_ip
Port jump_port
User jump_username

Host target # 为目标主机自定义简称
HostName target_ip
Port target_port
User target_username
ProxyJump jump[,...] #当存在多个跳板机时

保存配置文件后,使用ssh target即可完成连接。

ProxyCommand

OpenSSH版本低于7.3时,可以选择使用ProxyCommand,其使用方法如下:

1
ssh target_username@target_ip -p target_port -o ProxyCommand='ssh -p jump_port jump_username@jump_ip -W %h:%p'

其中target_usernamejump_username分别为目标主机和跳板机的ip地址,target_ipjump_ip分别为目标主机和跳板机的ip地址或域名,target_portjump_port分别为目标主机和跳板机的ssh服务器端口号,端口号22时可以默认省略。

为了能够简化命令,可以通过在~/.ssh/config中加入以下配置:

config
1
2
3
4
5
6
7
8
9
10
Host jump   # 为跳板机自定义简称
HostName jump_ip
Port jump_port
User jump_username

Host target # 为目标主机自定义简称
HostName target_ip
Port target_port
User target_username
ProxyCommand ssh jump -W %h:%p

保存配置文件后,使用ssh target即可完成连接。

免密登录

将本机~/.ssh/文件夹下的密钥对中的公钥(以.pub)结尾分别上传添加到跳板机和目标主机的~/.ssh/authorized_keys文件中,并且在本机配置文件~/.ssh/config中,分别在jumptarget的配置中加入密钥对中的私钥路径,若文件名为默认的id_rsa可以不作修改。

1
2
3
4
5
6
7
8
9
10
11
Host jump
...
...
IdentityFile "C:\Users\local_username\.ssh\private_key_filename" #本机为Windows系统时
IdentityFile "~\.ssh\private_key_filename" #本机为Linux系统时

Host target
...
...
IdentityFile "C:\Users\local_username\.ssh\private_key_filename" #本机为Windows系统时
IdentityFile "~\.ssh\private_key_filename" #本机为Linux系统时

如何生成密钥对可参考上一篇文章Windows&Linux SSH免密公钥登录


SSH跳板机访问内网机器及其免密登录
https://www.miaoer.icu/SSH跳板机访问内网机器及免密登录/
许可协议