中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python怎么使用paramiko模塊連接linux

發布時間:2021-02-01 11:42:10 來源:億速云 閱讀:212 作者:小新 欄目:開發技術

這篇文章主要介紹了Python怎么使用paramiko模塊連接linux,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

python程序需要連接linux時,需要使用密碼或者秘鑰驗證以登錄os進行命令操作或者文件傳輸,python中實現此功能的模塊為paramiko;下面是該模塊的基礎用法

下面是通過密碼進行linux登錄執行命令和文件傳輸示例

import paramiko
#python程序需要批量管理linux時需要借助paramilo模塊登錄linux執行命令或者傳輸文件,下面是最簡單的登錄主機執行命令
ssh_client = paramiko.SSHClient() #創建連接對象
ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允許連接不在know_hosts文件中的主機,首次登陸其它機器時會用到
ssh_client.connect(hostname="192.168.226.128", port=22, username="root", password="123456") #使用用戶名密碼連接主機
stdin, stdout, stderr = ssh_client.exec_command("df -h") #執行命令獲取結果
#獲取命令結果
res,err = stdout.read(),stderr.read()
result = res if res else err  ##這里我們使用三元運算
print(result.decode(encoding="utf-8"))
ssh_client.close() #關閉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是本地文件名,其它目錄需要寫絕對路徑形式, /root/123.tst上傳到128的root目錄且命名為123.tst
my_sftp.get("/root/hello.py", "hello_get.py") #將遠端的hello.py 下載到本地當前目錄且重命名為hello_get.py
transport.close()

代碼中出現明文密碼是不安全也不符合編程規范的,為了更加安全我們可使用秘鑰來進行登錄。

首先兩臺linux機器進行如下操作后就可以實現192.168.226.128免密登錄192.168.226.129

1、正常條件下128主機ssh連接129機器整個過程如下,需要數據密碼

Python怎么使用paramiko模塊連接linux

2、輸入ssh-keygen后,所有命令直接回車,在登錄用戶家目錄下.ssh目錄下會生成id_rsa和id_rsa.pub兩個文件,其中id_rsa是私鑰id_rsa.pub是公鑰

Python怎么使用paramiko模塊連接linux

3、ssh-copy-id命令可以將本地公鑰拷貝到129主機的root用戶家目錄下的authorized_keys文件里

Python怎么使用paramiko模塊連接linux

Python怎么使用paramiko模塊連接linux

3、此時128就可以免密登錄129了,但是129不能免密登錄128;如果需要則129需要進行與128相同的操作。可以免密是128的id_rsa與129對應用戶的authorized_keys文件內的公鑰能夠校驗成功

Python怎么使用paramiko模塊連接linux

4、對應的如果當前只進行上述操作,此時win機器可以通過128的id_rsa實現免密登錄129機器,具體實現如下

import paramiko
#python程序需要批量管理linux時需要借助paramilo模塊登錄linux執行命令或者傳輸文件,下面是最簡單的登錄主機執行命令
private_key = paramiko.RSAKey.from_private_key_file("id_rsa")
ssh = paramiko.SSHClient() #創建連接對象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #允許連接不在know_hosts文件中的主機
ssh.connect(hostname="192.168.226.129", port=22, username="root", pkey=private_key) #使用用戶名密碼連接主機
stdin, stdout, stderr = ssh.exec_command("df -h") #執行命令獲取結果
#獲取命令結果
res,err = stdout.read(),stderr.read()
result = res if res else err  ##這里我們使用三元運算
print(result.decode(encoding="utf-8"))
ssh.close() #關閉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、此時雖然有128的私鑰,但是無法免密登錄128,登錄時會報認證失敗,paramiko.ssh_exception.AuthenticationException: Authentication failed;此時還只能通過密碼登錄128或者通過將129生成的公鑰拷貝給128使用129私鑰登錄128。

2、不能使用128的公鑰來登錄129,此時win機器模擬的是128免密登錄129當然需要使用128的私鑰了,否則無法和129本地文件內128的公鑰無法配對;使用公鑰登錄129 會報不合法的私鑰文件paramiko.ssh_exception.SSHException: not a valid RSA private key file

感謝你能夠認真閱讀完這篇文章,希望小編分享的“Python怎么使用paramiko模塊連接linux”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

余江县| 察隅县| 新绛县| 泗水县| 沂水县| 喀喇沁旗| 博客| 威海市| 海南省| 娄烦县| 巴中市| 南溪县| 依安县| 泌阳县| 宜兰市| 霍州市| 万安县| 石城县| 高唐县| 商洛市| 赞皇县| 菏泽市| 宜春市| 邹平县| 张家界市| 惠来县| 盐津县| 昭平县| 萨迦县| 大埔县| 凤城市| 墨竹工卡县| 高唐县| 九龙城区| 新化县| 新民市| 临洮县| 宁波市| 乐山市| 抚州市| 临澧县|