簡介
使用開源的Paramiko时捌,我們就可以用Python代碼中通過SSH協(xié)議對遠程服務(wù)器執(zhí)行操作构拳,不需要手敲ssh命令压固,從而實現(xiàn)自動化運維。
ssh是一個協(xié)議秃诵,OpenSSH是其中一個開源實現(xiàn)续搀,paramiko庫,實現(xiàn)了SSHv2協(xié)議(底層使用cryptography)菠净。
項目文檔:點我跳轉(zhuǎn)
擴展:ssh協(xié)議禁舷,OpenSSH
上手
1彪杉、安裝
pip install paramiko
2、導(dǎo)入模塊
import paramiko
3牵咙、使用
def initSshClinet():
'''
初始化,SSH連接賬號密碼登錄服務(wù)器
:return: sshClinet
'''
ip = ""#服務(wù)器ip地址
sshClinet = paramiko.SSHClient()
sshClinet.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshClinet.connect(ip, 22, userName, pw, timeout=360)
return sshClinet
def exeCommond(commond):
'''
執(zhí)行shell命令
'''
stdin, stdout, stderr = sshClient.exec_command(command)
outStr = stdout.readlines()
print("\n".join(outStr))
def sftpUploadFile(localPath, remotePath):
#獲取SFTP實例
sftp = sshClinet.open_sftp()
#執(zhí)行上傳動作
sftp.put(localPath, remotePath)
def sftpDownloadFile(localPath, remotePath):
#獲取SFTP實例
sftp = sshClinet.open_sftp()
#執(zhí)行下載動作
sftp.get(localPath, remotePath)
末尾記得要關(guān)閉連接
sshClient.close()
也可以使用私鑰登錄:
# 配置私人密鑰文件位置
private = paramiko.RSAKey.from_private_key_file('/Users/ch/.ssh/id_rsa')
#實例化SSHClient
client = paramiko.SSHClient()
#自動添加策略派近,保存服務(wù)器的主機名和密鑰信息,如果不添加洁桌,那么不再本地know_hosts文件中記錄的主機將無法連接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#連接SSH服務(wù)端渴丸,以用戶名和密碼進行認證
client.connect(hostname='10.0.0.1',port=22,username='root',pkey=private)
學(xué)習(xí)
paramiko包含兩個核心組件:SSHClient和SFTPClient。
- SSHClient的作用類似于Linux的ssh命令另凌,是對SSH會話的封裝谱轨,該類封裝了傳輸(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp)吠谢,通常用于執(zhí)行遠程命令碟嘴。
- SFTPClient的作用類似與Linux的sftp命令,是對SFTP客戶端的封裝囊卜,用以實現(xiàn)遠程文件操作娜扇,如文件上傳、下載栅组、修改文件權(quán)限等操作雀瓢。
名詞 | 解釋 |
---|---|
Channel | 是一種類Socket,一種安全的SSH傳輸通道 |
Transport | 是一種加密的會話玉掸,使用時會同步創(chuàng)建了一個加密的Tunnels(通道)刃麸,這個Tunnels叫做Channel |
Session | 是client與Server保持連接的對象,用connect()/start_client()/start_server()開始會話 |
SSHClient常用的方法介紹
connect() :實現(xiàn)遠程服務(wù)器的連接與認證司浪,對于該方法只有hostname是必傳參數(shù)泊业。
參數(shù) | 說明 |
---|---|
hostname | 連接的目標(biāo)主機 |
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 | 是否打開壓縮 |
set_missing_host_key_policy() :設(shè)置遠程服務(wù)器沒有在know_hosts文件中記錄時的應(yīng)對策略。傳入MissingHostKeyPolicy的子類租谈,目前支持三種策略:
設(shè)置連接的遠程主機沒有本地主機密鑰或HostKeys對象時的策略篮奄,目前支持三種:
MissingHostKeyPolicy的子類 | 說明 |
---|---|
AutoAddPolicy | 自動添加主機名及主機密鑰到本地HostKeys對象,不依賴load_system_host_key的配置割去。即新建立ssh連接時不需要再輸入yes或no進行確認 |
WarningPolicy | 用于記錄一個未知的主機密鑰的python警告窟却。并接受,功能上和AutoAddPolicy類似呻逆,但是會提示是新連接 |
RejectPolicy | 自動拒絕未知的主機名和密鑰夸赫,依賴load_system_host_key的配置。此為默認選項 |
exec_command() :在遠程服務(wù)器執(zhí)行Linux命令的方法咖城。
open_sftp() :在當(dāng)前ssh會話的基礎(chǔ)上創(chuàng)建一個sftp會話茬腿。該方法會返回一個SFTPClient對象呼奢。
SFTPClient常用方法介紹
from_transport(cls,t) :創(chuàng)建一個已連通的SFTP客戶端通道
put(localpath, remotepath, callback=None, confirm=True) :將本地文件上傳到服務(wù)器 參數(shù)confirm:是否調(diào)用stat()方法檢查文件狀態(tài),返回ls -l的結(jié)果
get(remotepath, localpath, callback=None) :從服務(wù)器下載文件到本地
mkdir() :在服務(wù)器上創(chuàng)建目錄
remove() : 在服務(wù)器上刪除目錄
rename() :在服務(wù)器上重命名目錄
stat() :查看服務(wù)器文件狀態(tài)
listdir() :列出服務(wù)器目錄下的文件
本文由博客一文多發(fā)平臺 OpenWrite 發(fā)布滓彰!