python之自動化運維(Paramiko)

簡介

使用開源的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ā)布滓彰!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末控妻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子揭绑,更是在濱河造成了極大的恐慌弓候,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件他匪,死亡現(xiàn)場離奇詭異菇存,居然都是意外死亡,警方通過查閱死者的電腦和手機邦蜜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門依鸥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人悼沈,你說我怎么就攤上這事贱迟。” “怎么了絮供?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵衣吠,是天一觀的道長。 經(jīng)常有香客問我壤靶,道長缚俏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任贮乳,我火速辦了婚禮忧换,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘向拆。我一直安慰自己亚茬,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布亲铡。 她就那樣靜靜地躺著才写,像睡著了一般。 火紅的嫁衣襯著肌膚如雪奖蔓。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天讹堤,我揣著相機與錄音吆鹤,去河邊找鬼。 笑死洲守,一個胖子當(dāng)著我的面吹牛疑务,可吹牛的內(nèi)容都是我干的沾凄。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼知允,長吁一口氣:“原來是場噩夢啊……” “哼撒蟀!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起温鸽,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤保屯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后涤垫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體姑尺,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年蝠猬,在試婚紗的時候發(fā)現(xiàn)自己被綠了切蟋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡榆芦,死狀恐怖柄粹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情匆绣,我是刑警寧澤驻右,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站犬绒,受9級特大地震影響旺入,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜凯力,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一茵瘾、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧咐鹤,春花似錦拗秘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捧请,卻和暖如春凡涩,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背疹蛉。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工活箕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人可款。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓育韩,卻偏偏與公主長得像克蚂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子筋讨,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內(nèi)容