python 學習分享 paramiko模組

2022-09-03 09:27:08 字數 4813 閱讀 2309

paramiko模組學習分享

paramiko是用python語言寫的乙個模組,遵循ssh2協議,支援以加密和認證的方式,進行遠端伺服器的連線。paramiko支援linux, solaris, bsd, macos x, windows等平台通過ssh從乙個平台連線到另外乙個平台。利用該模組,可以方便的進行ssh連線和sftp協議進行sftp檔案傳輸。

首先讓我們理清以下幾個名詞:

paramiko 參考

pip3 install pycrypto

pip3 install paramiko

具體模組使用

sshclient:

遠端連線分為兩種:(1)基於使用者名稱密碼連線 (2)基於公鑰秘鑰連線

通過是用paramiko遠端操作,其實本質也分為兩種:(1)只用sshclient (2)自己建立乙個transport

基於使用者名稱密碼連線

import

paramiko #

建立ssh物件

ssh =paramiko.sshclient()

#允許連線不在know_hosts檔案中的主機

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())

#連線伺服器

ssh.connect(hostname='

host

', port=22, username='

root

', password='

123')#

執行命令 stdout命令結果,stderr錯誤

stdin, stdout, stderr = ssh.exec_command('ls'

)#獲取命令結果

result =stdout.read()

#關閉連線

ssh.close()

sshclient 封裝 transport

import

paramiko

transport = paramiko.transport(('

hostname

', 22))

transport.connect(username='

root

', password='

123')

ssh =paramiko.sshclient()

ssh._transport =transport

stdin, stdout, stderr = ssh.exec_command('df'

)print

(stdout.read())

transport.close()

基於公鑰秘鑰連線

import

paramiko

private_key = paramiko.rsakey.from_private_key_file('

/home/auto/.ssh/id_rsa')

#建立ssh物件

ssh =paramiko.sshclient()

#允許連線不在know_hosts檔案中的主機

ssh.set_missing_host_key_policy(paramiko.autoaddpolicy())

#連線伺服器

ssh.connect(hostname='

host

', port=22, username='

root

', key=private_key)

#執行命令

stdin, stdout, stderr = ssh.exec_command('df'

)#獲取命令結果

result =stdout.read()

#關閉連線

ssh.close()

sshclient 封裝transport

import

paramiko

private_key = paramiko.rsakey.from_private_key_file('

/home/auto/.ssh/id_rsa')

transport = paramiko.transport(('

hostname

', 22))

transport.connect(username='

wupeiqi

', pkey=private_key)

ssh =paramiko.sshclient()

ssh._transport =transport

stdin, stdout, stderr = ssh.exec_command('df'

)transport.close()

sftpclient:

import

paramiko

transport = paramiko.transport(('

hostname

',22))

transport.connect(username='

root

',password='

123')

sftp =paramiko.sftpclient.from_transport(transport)

#將location.py 上傳至伺服器 /tmp/test.py

sftp.put('

/tmp/location.py

', '

/tmp/test.py')

#sftp.get('

remove_path

', '

local_path')

transport.close()

import

paramiko

private_key = paramiko.rsakey.from_private_key_file('

/home/auto/.ssh/id_rsa')

transport = paramiko.transport(('

hostname

', 22))

transport.connect(username='

root

', pkey=private_key )

sftp =paramiko.sftpclient.from_transport(transport)

#將location.py 上傳至伺服器 /tmp/test.py

sftp.put('

/tmp/location.py

', '

/tmp/test.py')

#sftp.get('

remove_path

', '

local_path')

transport.close()

demo: 實現遠端命令執行和檔案上傳

import

paramiko

class

sshconnection(object):

def__init__(self, host='

192.168.12.68

', port=22, username='

locojoy

',pwd='

123321qq!'):

self.host =host

self.port =port

self.username =username

self.pwd =pwd

self.

__k =none

defrun(self):

self.connect()

#連線遠端伺服器

self.upload('

db.py

','/tmp/1.py

') #

將本地的db.py檔案上傳到遠端伺服器的/tmp/目錄下並改名為1.py

self.cmd('

df') #

執行df 命令

self.close() #

關閉連線

defconnect(self):

transport =paramiko.transport((self.host, self.port))

transport.connect(username=self.username, password=self.pwd)

self.

__transport =transport

defclose(self):

self.

__transport

.close()

defupload(self,local_path,target_path):

sftp = paramiko.sftpclient.from_transport(self.__transport

) sftp.put(local_path,target_path)

defcmd(self, command):

ssh =paramiko.sshclient()

ssh._transport = self.__transport

#執行命令

stdin, stdout, stderr =ssh.exec_command(command)

#獲取命令結果

result =stdout.read()

print

(result)

return

result

obj =sshconnection()

obj.run()

python 學習分享 字典篇

python字典 dictionary a 字典的增刪改查 a key3 value3 在a這個字典裡加入新的元素 key3 value3 del a key1 刪除a字典中的 key1 value1 a.clear 清空詞典所有條目 del a 刪除詞典 a key2 value2 new 將ke...

Python學習資料介紹分享

from 的老趙為我們分享了一篇不錯的文章 如果你要學習python的話,那麼他這篇博文中提供了很多有用的python學習資料的鏈結。你在尋找python學習資料的時候,看看下面老趙的推薦,也許會節省不少時間。兩個月前我在推薦sicp這本書時,我提到mit已經使用python代替經典的sicp這本書...

python的物件導向學習分享

1.關於類屬性和物件屬性,類屬性可以被類或者物件訪問。在類中宣告的物件屬性self.xx只能被物件所訪問。2.類方法和物件方法的區別 當類呼叫類方法時,會把類的引用傳遞過去 物件呼叫類方法時也會自動把物件的引用傳遞過去 但是類沒法直接呼叫物件方法,因為物件方法會預設把自身引用傳遞過去,用類去呼叫物件...