Python建立SSH連接與使用方法
paramiko是用python語言寫的一個(gè)模塊,遵循SSH2協(xié)議,支持以加密和認(rèn)證的方式,進(jìn)行遠(yuǎn)程服務(wù)器的連接
安裝過程也比較簡(jiǎn)單,先安裝pycrypto后安裝paramiko,解壓后在命令提示符下切換到解壓后的目錄,輸入python setup.py install就可以了。另外安裝pycrypto前需要先安裝mingw,不然會(huì)因?yàn)槿鄙倬幾g器而提示缺少一個(gè)BAT文件。安裝好mingw后,需要在Python安裝目錄下的Lib\distutils\文件夾里建立一個(gè)distutils.cfg文件,文件內(nèi)容為:
[build]
compiler=mingw32
mingw的下載地址:http://sourceforge.net/projects/mingw/files/Automated%20MinGW%20Installer/mingw-get-inst/
pycrypto的下載地址:http://www.dlitz.net/software/pycrypto/
paramiko的下載地址:http://pypi.python.org/pypi/paramiko
由于windows下安裝pycrypto 經(jīng)常出現(xiàn),如果出錯(cuò),本處筆者,提供一個(gè)快捷方法:
pycrypto下載穩(wěn)定已編譯版本:http://www.voidspace.org.uk/python/modules.shtml#pycrypto (到這個(gè)位置下載對(duì)應(yīng)的版本:pycrypto-2.6.win32-py2.7)
安裝好后,再通過pip install paramiko來安裝paramiko模塊
當(dāng)paramiko模塊安裝好后,可通過import paramiko進(jìn)行測(cè)試驗(yàn)證。
安裝好以后就可以編寫寫代碼了。由于我的SSH服務(wù)器只需要用戶名和密碼就可以連接,應(yīng)該說屬于最簡(jiǎn)單的一種了。
stdout.readlines()返回一個(gè)列表,一般來說,Linux命令的每行輸出存儲(chǔ)為一個(gè)元素,且已經(jīng)帶了換行符。
1 import paramiko 2 3 client = paramiko.SSHClient() 4 client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 5 client.connect('192.168.118.x', 22, username='xx', password='xx', timeout=10)
cmd = ['ls -l','echo hello!']#你要執(zhí)行的命令列表
for m in cmd: 6 stdin, stdout, stderr = client.exec_command(m) 7 for std in stdout.readlines(): 8 print std 9 client.close()
使用SSHClient對(duì)象的這個(gè)方法執(zhí)行例如ls,pwd等命令的時(shí)候,都執(zhí)行的還不錯(cuò)。
但是cd /path這個(gè)命令就有點(diǎn)問題了,發(fā)現(xiàn)cd到其他路徑下,但是使用pwd發(fā)現(xiàn)還是在登錄的時(shí)候的默認(rèn)路徑,/home/<user>
相當(dāng)于沒有執(zhí)行cd命令,這個(gè)時(shí)候就要把后續(xù)的想要執(zhí)行的命令和cd放在同一個(gè)字符串中傳入exec_command方法中才會(huì)生效。
例如:
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('IP', username='username', password='password', timeout=5)
client.exec_command('cd /home/<user>/xxx/yyy; ls -al')
這時(shí)會(huì)列出yyy的文件列表

浙公網(wǎng)安備 33010602011771號(hào)