Python如何使用paramiko模塊連接linux
python程序需要連接linux時(shí),需要使用密碼或者秘鑰驗(yàn)證以登錄os進(jìn)行命令操作或者文件傳輸,python中實(shí)現(xiàn)此功能的模塊為paramiko;下面是該模塊的基礎(chǔ)用法
下面是通過密碼進(jìn)行l(wèi)inux登錄執(zhí)行命令和文件傳輸示例
import paramiko #python程序需要批量管理linux時(shí)需要借助paramilo模塊登錄linux執(zhí)行命令或者傳輸文件,下面是最簡單的登錄主機(jī)執(zhí)行命令 ssh_client = paramiko.SSHClient() #創(chuàng)建連接對(duì)象 ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允許連接不在know_hosts文件中的主機(jī),首次登陸其它機(jī)器時(shí)會(huì)用到 ssh_client.connect(hostname="192.168.226.128", port=22, username="root", password="123456") #使用用戶名密碼連接主機(jī) stdin, stdout, stderr = ssh_client.exec_command("df -h") #執(zhí)行命令獲取結(jié)果 #獲取命令結(jié)果 res,err = stdout.read(),stderr.read() result = res if res else err ##這里我們使用三元運(yùn)算 print(result.decode(encoding="utf-8")) ssh_client.close() #關(guān)閉ssh #下面是傳輸文件 transport = paramiko.Transport(("192.168.226.128", 22)) transport.connect(username="root", password="123456") my_sftp = paramiko.SFTPClient.from_transport(transport) my_sftp.put("__init__.py", "/root/123.tst") #__init__.py是本地文件名,其它目錄需要寫絕對(duì)路徑形式, /root/123.tst上傳到128的root目錄且命名為123.tst my_sftp.get("/root/hello.py", "hello_get.py") #將遠(yuǎn)端的hello.py 下載到本地當(dāng)前目錄且重命名為hello_get.py transport.close()
代碼中出現(xiàn)明文密碼是不安全也不符合編程規(guī)范的,為了更加安全我們可使用秘鑰來進(jìn)行登錄。
首先兩臺(tái)linux機(jī)器進(jìn)行如下操作后就可以實(shí)現(xiàn)192.168.226.128免密登錄192.168.226.129
1、正常條件下128主機(jī)ssh連接129機(jī)器整個(gè)過程如下,需要數(shù)據(jù)密碼
2、輸入ssh-keygen后,所有命令直接回車,在登錄用戶家目錄下.ssh目錄下會(huì)生成id_rsa和id_rsa.pub兩個(gè)文件,其中id_rsa是私鑰id_rsa.pub是公鑰
3、ssh-copy-id命令可以將本地公鑰拷貝到129主機(jī)的root用戶家目錄下的authorized_keys文件里
3、此時(shí)128就可以免密登錄129了,但是129不能免密登錄128;如果需要?jiǎng)t129需要進(jìn)行與128相同的操作??梢悦饷苁?28的id_rsa與129對(duì)應(yīng)用戶的authorized_keys文件內(nèi)的公鑰能夠校驗(yàn)成功
4、對(duì)應(yīng)的如果當(dāng)前只進(jìn)行上述操作,此時(shí)win機(jī)器可以通過128的id_rsa實(shí)現(xiàn)免密登錄129機(jī)器,具體實(shí)現(xiàn)如下
import paramiko #python程序需要批量管理linux時(shí)需要借助paramilo模塊登錄linux執(zhí)行命令或者傳輸文件,下面是最簡單的登錄主機(jī)執(zhí)行命令 private_key = paramiko.RSAKey.from_private_key_file("id_rsa") ssh = paramiko.SSHClient() #創(chuàng)建連接對(duì)象 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允許連接不在know_hosts文件中的主機(jī) ssh.connect(hostname="192.168.226.129", port=22, username="root", pkey=private_key) #使用用戶名密碼連接主機(jī) stdin, stdout, stderr = ssh.exec_command("df -h") #執(zhí)行命令獲取結(jié)果 #獲取命令結(jié)果 res,err = stdout.read(),stderr.read() result = res if res else err ##這里我們使用三元運(yùn)算 print(result.decode(encoding="utf-8")) ssh.close() #關(guān)閉ssh #下面是傳輸文件 transport = paramiko.Transport(("192.168.226.129", 22)) transport.connect(username="root", pkey=private_key) my_sftp = paramiko.SFTPClient.from_transport(transport) my_sftp.put("__init__.py", "/root/123.tst") my_sftp.get("/root/hello.py", "hello_get129.py") transport.close()
注意:
1、此時(shí)雖然有128的私鑰,但是無法免密登錄128,登錄時(shí)會(huì)報(bào)認(rèn)證失敗,paramiko.ssh_exception.AuthenticationException: Authentication failed;此時(shí)還只能通過密碼登錄128或者通過將129生成的公鑰拷貝給128使用129私鑰登錄128。
2、不能使用128的公鑰來登錄129,此時(shí)win機(jī)器模擬的是128免密登錄129當(dāng)然需要使用128的私鑰了,否則無法和129本地文件內(nèi)128的公鑰無法配對(duì);使用公鑰登錄129 會(huì)報(bào)不合法的私鑰文件paramiko.ssh_exception.SSHException: not a valid RSA private key file
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- python 使用paramiko模塊進(jìn)行封裝,遠(yuǎn)程操作linux主機(jī)的示例代碼
- Python paramiko使用方法代碼匯總
- python如何利用paramiko執(zhí)行服務(wù)器命令
- python利用paramiko實(shí)現(xiàn)交換機(jī)巡檢的示例
- python Paramiko使用示例
- 解決Python paramiko 模塊遠(yuǎn)程執(zhí)行ssh 命令 nohup 不生效的問題
- Python使用Paramiko控制linux第三方庫
- Python基于模塊Paramiko實(shí)現(xiàn)SSHv2協(xié)議
- python使用paramiko實(shí)現(xiàn)ssh的功能詳解
- Python paramiko 模塊淺談與SSH主要功能模擬解析
- Python如何實(shí)現(xiàn)Paramiko的二次封裝
相關(guān)文章
使用OpenCV circle函數(shù)圖像上畫圓的示例代碼
這篇文章主要介紹了使用OpenCV circle函數(shù)圖像上畫圓的示例代碼,本文內(nèi)容簡短,給大家突出重點(diǎn)內(nèi)容,需要的朋友可以參考下2019-12-12python回溯算法實(shí)現(xiàn)全排列小練習(xí)分享
這篇文章主要給大家分享的是python回溯算法實(shí)現(xiàn)全排列小練習(xí),文章根據(jù)例子:輸入列表L(不含重復(fù)元素),輸出L的全排列展開學(xué)習(xí),需要的小伙伴可以參考一下2022-02-02Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例
今天小編就為大家分享一篇Python讀取mat文件,并轉(zhuǎn)為csv文件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-07-07python如何實(shí)現(xiàn)多層級(jí)自動(dòng)賦值字典
這篇文章主要介紹了python如何實(shí)現(xiàn)多層級(jí)自動(dòng)賦值字典問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08快速上手基于Anaconda搭建Django環(huán)境的教程
Django具有完整的封裝,開發(fā)者可以高效率的開發(fā)項(xiàng)目,Django將大部分的功能進(jìn)行了封裝,開發(fā)者只需要調(diào)用即可,接下來通過本文給大家介紹基于Anaconda搭建Django環(huán)境的教程,需要的朋友可以參考下2021-10-10關(guān)于Python數(shù)據(jù)處理中的None、NULL和NaN的理解與應(yīng)用
這篇文章主要介紹了關(guān)于Python數(shù)據(jù)處理中的None、NULL和NaN的理解與應(yīng)用,None表示空值,一個(gè)特殊Python對(duì)象,None的類型是NoneType,需要的朋友可以參考下2023-08-08Python通過隊(duì)列實(shí)現(xiàn)進(jìn)程間通信詳情
這篇文章主要介紹了Python通過隊(duì)列實(shí)現(xiàn)進(jìn)程間通信詳情文章通過提出問題:在多進(jìn)程中,每個(gè)進(jìn)程之間是什么關(guān)系展開主題相關(guān)內(nèi)容,感興趣的朋友可以參考一下2022-06-06