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機器上)

  1. 生成密鑰對,供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

 

 

  




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM