python 遠端執行命令

2022-05-16 17:15:07 字數 3054 閱讀 8547

1.簡單版

#

coding: utf-8

import

paramiko

import

refrom time import

sleep

defssh():

ssh =paramiko.sshclient()

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())

#指定當對方主機沒有本機公鑰的情況時應該怎麼辦,autoaddpolicy表示自動在對方主機儲存下本機的秘鑰

ssh.connect('

172.16.1.5

',22,'

linyouyi

','123456

') #

ssh埠預設22,可改

stdin,stdout,stderr = ssh.exec_command("

df -hl

") #

這三個得到的都是類檔案物件

outmsg,errmsg = stdout.read(),stderr.read() #

讀一次之後,stdout和stderr裡就沒有內容了,所以一定要用變數把它們帶的資訊給儲存下來,否則read一次之後就沒有了

#outmsg = str(outmsg)

#print(outmsg.replace("\\n","\\r\\n"))

print

(outmsg.decode())

print

(errmsg)

if errmsg == ""

:

print

(outmsg)

ssh.close()

if__name__ == '

__main__':

ssh()

2.封裝版

#

coding: utf-8

import

paramiko

import

refrom time import

sleep

#定義乙個類,表示一台遠端linux主機

class

linux(object):

#通過ip, 使用者名稱,密碼,超時時間初始化乙個遠端linux主機

def__init__(self, ip, username, password, timeout=30):

self.ip =ip

self.username =username

self.password =password

self.timeout =timeout

#transport和chanel

self.t = ''

self.chan = ''

#鏈結失敗的重試次數

self.try_times = 3

#呼叫該方法連線遠端主機

defconnect(self):

while

true:

#連線過程中可能會丟擲異常,比如網路不通、鏈結超時

try:

self.t = paramiko.transport(sock=(self.ip, 22))

self.t.connect(username=self.username, password=self.password)

self.chan =self.t.open_session()

self.chan.settimeout(self.timeout)

self.chan.get_pty()

self.chan.invoke_shell()

#如果沒有丟擲異常說明連線成功,直接返回

print(u'

連線%s成功

' %self.ip)

#接收到的網路資料解碼為str

print(self.chan.recv(65535).decode('

utf-8'))

return

#這裡不對可能的異常如socket.error, socket.timeout細化,直接一網打盡

except

exception as e1:

if self.try_times !=0:

print(u'

連線%s失敗,進行重試

' %self.ip)

self.try_times -= 1

else

:

print(u'

重試3次失敗,結束程式')

exit(1)

#斷開連線

defclose(self):

self.chan.close()

self.t.close()

#傳送要執行的命令

defsend(self, cmd):

cmd += '\r'

#通過命令執行提示符來判斷命令是否執行完成

p = re.compile(r']$'

) result = ''

#傳送要執行的命令

self.chan.send(cmd)

#回顯很長的命令可能執行較久,通過迴圈分批次取回回顯

while

true:

sleep(2)

ret = self.chan.recv(65535)

ret = ret.decode('

utf-8')

result +=ret

ifp.search(ret):

print

(result)

return

(result)

if__name__ == '

__main__':

host = linux('

172.16.1.5

', '

linyouyi

', '

123456')

host.connect()

host.send('ll

')host.close()

Python遠端執行命令和拷貝

使用paramiko庫和scp庫結合 import paramiko from scp import scpclient class linuxsshscp object def init self,ip,username,password,port 22 self.ip ip self.usern...

遠端執行命令

遠端執行命令 這個分兩步,很簡單很實用。第一步,設定ssh免認證,免認證就是只不用密碼認證就可以直接登入,這在寫指令碼伺服器控制時特別有用。ssh keygen t rsa cd ssh ssh copy id xuexi01注 xuexi01是主機名,也可寫成ip,如192.168.2.11 第二...

遠端執行命令

一 需求 server 下發命令 client 執行命令 ssh協議 import os ret os.popen ls read print ret import subprocess 內建模組 和os模組的功能有相似之處 能執行作業系統的命令的功能 ret subprocess.popen di...