我有一個項目,我需要ssh到大量的服務器頻繁地調用一個命令。我認爲這是可能的從一個python腳本,但我的要求似乎消除所有潛在的解決方案。我只能從中間堡壘服務器訪問服務器,並且只能使用與ssh代理一起轉發的ssh公鑰。因此,我的要求是:如何通過ssh代理與ssh代理並行執行ssh代理以在python中進行身份驗證?
- 並行的ssh,所以我不是等待數小時到所有服務器上運行命令完成
- SSH公鑰的支持,我無法使用密碼認證
- SSH進行代理的支持,我不能沒有通過SSH代理服務器去
- SSH代理支持直接ssh到服務器,因爲我需要讓我的(預加載)SSH公鑰通過代理服務器發送到服務器
paramiko似乎提供了以上所有的第一個要求(並行ssh支持)的例外。我發現了一個parallel-ssh模塊(https://github.com/pkittenis/parallel-ssh),它可以作爲paramiko的一個薄包裝器,但是,它似乎缺少對並行ssh和公鑰驗證以外的其他任何API的支持。
這裏是我已經有了,現在,這幾個地方的服務器不需要代理或ssh代理訪問的工作原理:
#!/usr/bin/python2.7
import sys
if 'threading' in sys.modules:
raise Exception('threading module loaded before patching!')
import gevent.monkey; gevent.monkey.patch_thread()
import paramiko
from pssh import ParallelSSHClient
paramiko.util.log_to_file("filename.log")
hosts = ['ocb100','netllama']
client_key = paramiko.DSSKey.from_private_key_file('/home/netllama/.ssh/id_dsa')
client = ParallelSSHClient(hosts, pkey=client_key)
cmds = client.exec_command('uptime')
考慮Fabric - 它專門設計用於在許多ssh'd服務器上運行命令。 HTTP://www.fabfile。org/ – johntellsall 2014-08-29 21:16:04
您可以在不同線程中同時運行多個paramiko客戶端。那是你需要的嗎? – tdelaney 2014-08-29 21:51:07
我希望避免管理線程的開銷,但如果這是唯一的方法來獲得我需要去的地方,我會試試看。 – netllama 2014-08-30 01:08:29