Python中使用SSH需要用到OpenSSH梳虽,而OpenSSH依賴于paramiko模塊轻纪,而paramiko模塊又依賴于pycrypto模塊噪生,因此要在Python中使用SSH逻淌,則需要先安裝模塊順序是: pycrypto -> paramiko
我是直接使用pip安裝:
下面是網(wǎng)上的一些栗子:
栗子一:執(zhí)行遠(yuǎn)程命令:
import paramiko
#新建一個ssh客戶端對象
client = paramiko.SSHClient()
# 設(shè)置成默認(rèn)自動接受密鑰
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#連接遠(yuǎn)程主機(jī)
client.connect('IP', 22, username='root', password='password', timeout=4)
#在遠(yuǎn)程主機(jī)執(zhí)行shell命令
stdin, stdout, stderr = client.exec_command('ls -l')
#讀取執(zhí)行結(jié)果
for std in stdout.readlines():
print (std,)
client.close()
栗子二:上傳本地文件至遠(yuǎn)程主機(jī)
import paramiko
t = paramiko.Transport(("IP",22))
t.connect(username = "username", password = "password")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.put(localpath,remotepath)
t.close()
栗子三:下載遠(yuǎn)程主機(jī)文件到本地
import paramiko
t = paramiko.Transport(("IP",22))
t.connect(username = "username", password = "password")
sftp = paramiko.SFTPClient.from_transport(t)
remotepath='/tmp/test.txt'
localpath='/tmp/test.txt'
sftp.get(remotepath, localpath)
t.close()
栗子四:
通常需要對多個服務(wù)器或者虛擬機(jī)進(jìn)行管理,可以采用批量的方式進(jìn)行。
import paramiko
import threading
def ssh2(ip,username,passwd,cmd):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip,22,username,passwd,timeout=5)
for m in cmd:
stdin, stdout, stderr = ssh.exec_command(m)
out = stdout.readlines()
for o in out:
print (o,) #屏幕輸出
print ('%s\tOK\n'%(ip))
ssh.close()
except :
print ('%s\tError\n'%(ip))
if __name__=='__main__':
cmd = ['echo hello!']#需要執(zhí)行的命令列表
username = "root" #用戶名
passwd = "root" #密碼
threads = [] #多線程
print ("Begin excute......")
for i in range(1,254):
ip = '192.168.1.'+str(i)
a=threading.Thread(target=ssh2,args=(ip,username,passwd,cmd))
a.start()
最后一個栗子,如果命令較少,pssh更適合备恤。