由于項(xiàng)目需要用到在別的主機(jī)上執(zhí)行命令的功能而又沒(méi)有部署salt之類的管理工具,所以就找到了paramiko搜贤,一款使用用戶名密碼port等SSH到別的主機(jī)執(zhí)行命令的第三方庫(kù)掖举。
1包券、安裝
pip install paramiko
2、引入
import paramiko
3株旷、使用
示例:
a再登、建立連接
ssh_fd = paramiko.SSHClient()
ssh_fd.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh_fd.connect(host, port=ssh_port, username=username, password=passwd)
注:這里可以指定很多參數(shù),具體可參考官網(wǎng)
b晾剖、遠(yuǎn)程執(zhí)行命令
stdin, stdout, stderr = ssh_fd.exec_command(cmd, bufsize=-1)
注:這里也是可以加很多的參數(shù)的锉矢,比如緩沖區(qū)大小(默認(rèn)很小齿尽,輸出結(jié)果長(zhǎng)的話就會(huì)有問(wèn)題沽损,這里-1是不限制大小)循头、命令執(zhí)行超時(shí)時(shí)間等绵估,具體參考官網(wǎng)
這里的stdin,stdout卡骂,stderr分別對(duì)應(yīng)三個(gè)緩沖區(qū):標(biāo)準(zhǔn)輸入国裳、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤,可以通過(guò)
res = stdout.read()
這樣獲取執(zhí)行結(jié)果或者執(zhí)行異常時(shí)的錯(cuò)誤信息全跨,這里讀取到信息可能是bytes字節(jié)型缝左,通常要轉(zhuǎn)換成str才能正常使用
bytes轉(zhuǎn)str方式
out=stdout.read().decode('ascii')
注:這里有兩個(gè)坑,一個(gè)是stdout只能讀取一次,后面再read會(huì)得到空值渺杉;另一個(gè)是不同的系統(tǒng)輸出可能要使用不同的解碼方式蛇数,比如utf-8,ascii是越,gbk等