ssh通过ProxyCommand解决本地内网登陆云服务内网环境问题

现在大家在操作云主机时可能有个非常常见的需求:本地需要登陆云服务器,但云服务器在内网,只有一台跳板机可以使用。常规操作你需要先登陆跳板机,再登陆云服务器,其实这两步可以合成一部,就是利用ssh的ProxyCommand功能。下面举例详细说明:

先说明实验环境,n0是客户端,模拟企业内网,n1是云端的跳板机,n4是需要登陆的目标云主机,那常规情况下,需要n0登陆n1,再从n1登陆n4。

操作步骤也很简单,3个要点:

(1)n1可以直接登陆到n4,n0可以直接登陆到n1,这个是废话;

(2)n1有n0的公钥,也就是no可以免密登陆n1;

(3)n4有n0的公钥,也就是n0可以免密登陆n4;

(4)也就是说n1可不可以免密登陆n4无所谓,只要n1和n4的网是通的就行了,n0是借n1跳到n4,仅此而已,n1不需要其他操作;

下面是n4存放的公钥,可以看到n0的我放上去了

[root@n4 ~]# cat /root/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwHtKHmZP94Je5axcLe9/tT0XTQvwwCXglrsNvkRwJEtbLYFXU9qqYpqvQ3L1QXmA3oLRKjRHCsTvFPjFnA9mNFTRtEy9CHNJF7Gw57kfI1XIJF1IsWjTzYtya8RAWDflRRZtc+tB6Wkf1TR+51aAhT5fVMXU+AGR/itghwH7qi5Vb5PpsXrE18UnmfeibA+UGZ072ShaTTUBrHiQX7JTPDx5W/iR8KjUs6gj1tS+B030IfNTnkc31NUFQafIlmDD1ZKvqfxKyF0vUFzoUquebhZXYZDoQm7LWH9ZPt7W0nV/QBcXHiFIhRDREEulf0C9YxmBH4QhvacFavj39LuJr root@n0

下面是n1存放的公钥,可以看到n0我也放上去了

[root@n1 ~]# cat /root/.ssh/authorized_keys 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCwHtKHmZP94Je5axcLe9/tT0XTQvwwCXglrsNvkRwJEtbLYFXU9qqYpqvQ3L1QXmA3oLRKjRHCsTvFPjFnA9mNFTRtEy9CHNJF7Gw57kfI1XIJF1IsWjTzYtya8RAWDflRRZtc+tB6Wkf1TR+51aAhT5fVMXU+AGR/itghwH7qi5Vb5PpsXrE18UnmfeibA+UGZ072ShaTTUBrHiQX7JTPDx5W/iR8KjUs6gj1tS+B030IfNTnkc31NUFQafIlmDD1ZKvqfxKyF0vUFzoUquebhZXYZDoQm7LWH9ZPt7W0nV/QBcXHiFIhRDREEulf0C9YxmBH4QhvacFavj39LuJr root@n0

关键的步骤来了,在n0上面编辑.ssh/config

[root@n0 ~]# cat /root/.ssh/config 
Host n1
Hostname xxx.xxx.xxx.n1
Port 22
User root
IdentityFile ~/.ssh/id_rsa

Host n4
Hostname xxx.xxx.xxx.n4
Port 22
User root
ProxyCommand ssh n1 -W %h:%p
IdentityFile ~/.ssh/id_rsa

我详细说明下上面的格式是什么意思

Host n1 #任意名字,随便使用
HostName 192.168.1.1 #这个是跳板机的IP,支持域名
Port 22 #跳板机端口
User username_jmp #跳板机用户

Host n4 #同样,任意名字,随便起,这一步写的是客户端最终要跳的目标主机
HostName 192.168.1.2 #真正登陆的服务器,不支持域名必须IP地址
Port 22 #服务器的端口
User username #服务器的用户
ProxyCommand ssh username_jmp@jmp -W %h:%p

Host 10.10.0.* #可以用*通配符,也就是说你可以跳一个网段
Port 22 #服务器的端口
User username #服务器的用户
ProxyCommand ssh username_jmp@jm[] -W %h:%p

 

做完上面的步骤,你就能直接跳n4了

[root@n0 ~]# ssh n4
Last login: Mon Aug 19 21:46:13 2019 from 10.1.24.232
[root@n4 ~]# 

看到没有,其实本质上是通过下面这条命令登陆的:(只不过他写在了config里面去了)

ssh username@目标机器ip -p 22 -o ProxyCommand='ssh -p 22 username@跳板机ip -W %h:%p'

 

此条目发表在ssh分类目录,贴了标签。将固定链接加入收藏夹。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注