首先我先讲讲这个过程,由于从来没接触过跳板机,昨天按照网上的方法设置了一下午和一晚上都没有成功,后来今天早上醒来一想,是不是把ansible主机的公钥也发送到目标机是不是也就OK了?刚才试了一下,果然是啊。。。
目的:
ssh访问没有公网IP的阿里云服务器(类似于下图)
我的场景:
ansible主机:192.168.10.150(本地虚拟机)
跳板机:跳板机公网IP (具有公网IP的服务器)
目标机:172.17.3.155 (和跳板机处于同于内网的服务器)
步骤:
一、将ansible主机的公钥发送到跳板机和目标机:
1.1 首先生成ssh公钥秘钥对(如果没有,有就不用了):
ssh-keygen -t rsa
一路默认回车,系统会在~/.ssh下生成id_rsa、id_rsa.pub
1.2 然后将公钥发送到跳板机和目标机:
可以直接将公钥的内容拷贝到~/.ssh/authorized_keys中
chmod 600 ~/.ssh/authorized_keys
或者ssh-copy-id -p12345 user@IP(跳板机可以使用,目标机不能)
二、跳板机安装nc命令
执行nc -help确认命令是否成功安装(没有安装的可以百度安装,我这里是已经安装好了的)
三、测试ssh是否能通过跳板机连接到目标机
ssh -o "ProxyCommand ssh -p 12345 user@跳板机公网IP nc -w 1000 %h %p" -p22 user@172.17.3.155
四、测试添加到~/.ssh/config配置文件中
vim ~/.ssh/config
Host bastion
HostName 跳板机公网IP
Port 12345
BatchMode yes
User admin
Host prod1
HostName 172.17.3.155
ServerAliveInterval 60
TCPKeepAlive yes
#IdentityFile ~/.ssh/keys/bastion_id_rsa
ProxyCommand ssh bastion 'nc -w 14400 %h %p'
User admin
Port 22
此时ssh prod1即可登录到目标主机
由于实际情况生产的服务器太多不能一个一个的config配置文件,所以config可以配置如下:
bash
Host bastion
HostName 跳板机公网IP
Port 12345
BatchMode yes #这个选项对脚本文件和批处理任务十分有用
User admin
Host 172.17.3.×
#本地 ssh 每隔 60s 向 server 端 sshd 发送 keep-alive 包,如果发送 50 次,server 无回应断开连接。
ServerAliveInterval 60
#ServerAliveCountMax 50
#前一个参数表示要保持TCP连接,后一个参数(ClientAliveCountMax)表示客户端的SSH连线闲置多长时间后自动终止连线的数值,单位为分钟。
TCPKeepAlive yes
#ClientAliveCountMax 360
#IdentityFile ~/.ssh/keys/bastion_id_rsa
ProxyCommand ssh bastion 'nc -w 14400 %h %p'
User admin
Port 22
ssh 172.17.3.155即可登录连接
版权声明:本文为qq_39122146原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。