-
一. 需求背景:
在我們使用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