ansible跳板机

首先我先讲讲这个过程,由于从来没接触过跳板机,昨天按照网上的方法设置了一下午和一晚上都没有成功,后来今天早上醒来一想,是不是把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版权协议,转载请附上原文出处链接和本声明。