ansible 通过堡垒机/跳板机 访问目标机器需求实战(ssh agent forward)
-
一. 需求背景:
在我们使用ansible的过程中经常会遇到这样的情况,我们要管理的机器都在内网中,这些内网机器的登录都是通过跳板机或者堡垒机登录。我们的ansible机器不能直接管理到这些后端的机器,那这个问题如何解决呢?
在网上找了很多的文章都写的有一些问题,也不全面,自己决定记录一个。
-
二. 解决方法:
由于ansible管理机器都是通过ssh,而ssh则为我们提供了一个agent forward功能,我们可以借助这个功能来解决上述问题。
-
三.测试环境:
ansible机器: 10.250.0.90
跳板机 : 119.27.168.100
内网机器 : 10.139.165.32
需要用到的软件: keychain
使用及下载链接: https://www.funtoo.org/Keychain
github地址: https://github.com/funtoo/keychain/releases
-
四.配置ansible机器通过ssh forward模式使用秘钥key 经过堡垒机转发直接登录跳板机。(秘钥的生成都是在ansible机器上)
- 生成密钥对,供ansible机器登录跳板机。
[root@localhost ~]# ssh-keygen
2.将对应的公钥拷贝到跳板机。
[root@localhost ~]# ssh-copy-id -i /root/.ssh/tiaobanji_id_rsa.pub python@119.27.168.100 -p 2704
3.生成第二个密钥对,供登录后端机器用。方法同4.1
[root@localhost ~]# ssh-keygen
4.将刚生成的密钥对的公钥手动拷贝到后端的10.139.165.32机器的认证文件中
将/root/.ssh/10.139.165.32_id_rsa.pub中的内容复制到10.139.165.32机器/home/python/.ssh/authorized_keys 如果没有就手动穿件一个这个文件。注意权限
authorized_keys 权限为600 所属组及所属用户是python
.ssh的权限是700 所属组及所属用户是python
5.在ansible机器上配置ssh连接文件。(后面指定这个文件连接后端机器)
[root@localhost ~]# vim ssh_config
Host 10.139.165.32 User python Port 2704 ForwardAgent yes ProxyCommand ssh -qaY -i /root/.ssh/tiaobanji_id_rsa python@119.27.168.100 -p 2704 'nc -w 14400ms %h %p' IdentityFile /root/.ssh/10.139.165.32_id_rsa
-
五.使用keychain及ssh-agent ssh-add来管理key
1.下载安装keychain
github地址: https://github.com/funtoo/keychain/releases
wget https://codeload.github.com/funtoo/keychain/tar.gz/2.8.4 tar -xzvf 2.8.4
cd keychain-2.8.4/
install -m0755 keychain /usr/bin
2.修改.bash_profile文件
[root@localhost keychain-2.8.4]# vim ~/.bash_profile
在文件最后添加如下行:
eval `keychain --eval --agents ssh /root/.ssh/10.139.165.32_id_rsa /root/.ssh/tiaobanji_id_rsa` #这里将需要使用的私钥都写到里面,空格隔开
添加好后退出当前会话,重新连接ansible机器,会提示你将私钥添加到管理,输入对应的秘钥。
添加好后每次进入会是如下情况:
可以通过ssh-add命令来管理秘钥 -l 查看 -d删除 跟key添加
[root@localhost ~]# ssh-add -l 2048 SHA256:WIfFa/cxyGpP9w4Wc2/rja2NgmoqhQlVyBM+yWAYXKE /root/.ssh/10.139.165.32_id_rsa (RSA) 2048 SHA256:oiXSY73sCgQ+7vEr/ssVQGJsuPPDtSUfIKEvW2KWo0Q /root/.ssh/tiaobanji_id_rsa (RSA)
-
六.指定ssh_config文件进行连接测试 (ssh_config为上面我们配置的文件)
[root@localhost ~]# ssh -p 2704 10.139.165.32 -F ssh_config Last login: Tue Mar 12 16:05:21 2019 from 113.81.197.164 [python@heaven-00 ~]$
从上面的执行结果可以看出我们已经成功的从ansible机器登录到了跳板机后端的机器,当这里连接成功后使用ansible管理就很容易了。
-
七.配置ansible /etc/ansible/ansible.cfg文件,添加ssh连接使用我们配置的文件连接。
添加如下配置:
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -F /root/ssh_config
-
八.添加后端机器到ansible的inventory文件 。我这里使用的是默认的/etc/ansible/hosts
-
九.使用ansible管理测试
成功!!!
参考文章:
https://www.linuxidc.com/Linux/2011-08/39872.htm
https://www.funtoo.org/Keychain
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!