python模組學習 Paramiko

2021-10-07 14:56:14 字數 4878 閱讀 9643

目錄

簡介與安裝

paramiko中的幾個基礎名詞:

1. sshclient常用的方法介紹

1.1 connect()

1.2 set_missing_host_key_policy()

1.3 exec_command()

1.4 open_sftp()

1.5 sshclient常用的方法舉例

金鑰連線方式

sshclient 封裝 transport

2. sftpclient常用方法介紹

2.1 sftpclient常用方法舉例

perference:

ssh是乙個協議,openssh是其中乙個開源實現,paramiko是python的乙個庫,實現了sshv2協議(底層使用cryptography)。

有了paramiko以後,我們就可以在python**中直接使用ssh協議對遠端伺服器執行操作,而不是通過ssh命令對遠端伺服器進行操作。

由於paramiko屬於第三方庫,所以需要使用如下命令先行安裝

pip install paramiko
paramiko包含兩個核心元件:sshclient和sftpclient。

1、channel:是一種類socket,一種安全的ssh傳輸通道;

2、transport:是一種加密的會話,使用時會同步建立了乙個加密的tunnels(通道),這個tunnels叫做channel;

3、session:是client與server保持連線的物件,用connect()/start_client()/start_server()開始會話。

實現遠端伺服器的連線與認證,對於該方法只有hostname是必傳引數。

常用引數

hostname 連線的目標主機

port=ssh_port 指定埠

username=none驗證的使用者名稱

password=none驗證的使用者密碼

pkey=none私鑰方式用於身份驗證

key_filename=none乙個檔名或檔案列表,指定私鑰檔案

timeout=none可選的tcp連線超時時間

allow_agent=true, 是否允許連線到ssh**,預設為true允許

look_for_keys=true是否在~/.ssh中搜尋私鑰檔案,預設為true允許

compress=false, 是否開啟壓縮

設定遠端伺服器沒有在know_hosts檔案中記錄時的應對策略。目前支援三種策略:

設定連線的遠端主機沒有本地主機金鑰或hostkeys物件時的策略,目前支援三種:

autoaddpolicy自動新增主機名及主機金鑰到本地hostkeys物件,不依賴load_system_host_key的配置。即新建立ssh連線時不需要再輸入yes或no進行確認

warningpolicy用於記錄乙個未知的主機金鑰的python警告。並接受,功能上和autoaddpolicy類似,但是會提示是新連線

rejectpolicy自動拒絕未知的主機名和金鑰,依賴load_system_host_key的配置。此為預設選項

在遠端伺服器執行linux命令的方法。

在當前ssh會話的基礎上建立乙個sftp會話。該方法會返回乙個sftpclient物件。

# 利用sshclient物件的open_sftp()方法,可以直接返回乙個基於當前連線的sftp物件,可以進行檔案的上傳等操作.

sftp=client.open_sftp()

sftp.put('test.txt','text.txt')

import paramiko

# 例項化sshclient

client = paramiko.sshclient()

# 自動新增策略,儲存伺服器的主機名和金鑰資訊,如果不新增,那麼不再本地know_hosts檔案中記錄的主機將無法連線

client.set_missing_host_key_policy(paramiko.autoaddpolicy())

# 連線ssh服務端,以使用者名稱和密碼進行認證

client.connect(hostname='192.168.1.105', port=22, username='root', password='123456')

# 開啟乙個channel並執行命令

stdin, stdout, stderr = client.exec_command('df -h ') # stdout 為正確輸出,stderr為錯誤輸出,同時是有1個變數有值

# 列印執行結果

print(stdout.read().decode('utf-8'))

# 關閉sshclient

client.close()

# 配置私人金鑰檔案位置

private = paramiko.rsakey.from_private_key_file('/users/ch/.ssh/id_rsa')

#例項化sshclient

client = paramiko.sshclient()

#自動新增策略,儲存伺服器的主機名和金鑰資訊,如果不新增,那麼不再本地know_hosts檔案中記錄的主機將無法連線

client.set_missing_host_key_policy(paramiko.autoaddpolicy())

#連線ssh服務端,以使用者名稱和密碼進行認證

client.connect(hostname='10.0.0.1',port=22,username='root',pkey=private)

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 -h')

print(stdout.read().decode('utf-8'))

transport.close()

import paramiko

# 獲取transport例項

tran = paramiko.transport(('10.0.0.3', 22))

# 連線ssh服務端,使用password

tran.connect(username="root", password='123456')

# 或使用

# 配置私人金鑰檔案位置

private = paramiko.rsakey.from_private_key_file('/users/root/.ssh/id_rsa')

# 連線ssh服務端,使用pkey指定私鑰

tran.connect(username="root", pkey=private)

# 獲取sftp例項

sftp = paramiko.sftpclient.from_transport(tran)

# 設定上傳的本地/遠端檔案路徑

localpath = "/users/root/downloads/1.txt"

remotepath = "/tmp/1.txt"

# 執行上傳動作

sftp.put(localpath, remotepath)

sftp.get(remotepath, localpath)

tran.close()

python學習(模組)

模組搜尋路徑 匯入乙個叫 spam 的模組時,直譯器先在當前目錄中搜尋名為 spam.py 的檔案,然後在環境變數 pythonpath 指琮的目錄列表中搜尋,然後是環境變數 path 中的路徑列表。如果 pythonpath 沒有設定,或者檔案沒有找到,接下來搜尋安裝目錄,在 unix 中,通常是...

python 模組學習

一 from django.contrib.auth.hashers import make password 通過函式名即可發現,主要有兩個函式,分別是建立密碼和驗證 用法ps 123456 dj ps make password ps,none,pbkdf2 sha256 建立django密碼,...

python學習 模組

time import time time.ctime 獲取當前時間的字串 time.localtime 返回值是strcut time型別的物件 st time.localtime st.tm yday 現在是今年第幾天 st.tm hour 現在是今天第幾個小時 st.tm mon 現在是今年的...