最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

借助Paramiko通過Python實現(xiàn)linux遠程登陸及sftp的操作

 更新時間:2020年03月16日 13:33:54   作者:beeworkshop  
這篇文章主要介紹了借助Paramiko通過Python實現(xiàn)linux遠程登陸及sftp,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

paramiko是一個用于做遠程控制的模塊,使用該模塊可以對遠程服務器進行命令或文件操作,paramiko是用python語言寫的一個模塊,遵循SSH2協(xié)議,支持以加密和認證的方式,進行遠程服務器的連接。

由于使用的是python這樣的能夠跨平臺運行的語言,所以所有python支持的平臺,如Linux, Solaris, BSD, MacOS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH從一個平臺連接到另外一個平臺,進行一系列的操作時,paramiko是最佳工具之一。

本文重點給大家介紹借助Paramiko通過Python實現(xiàn)linux遠程登陸及sftp操作。

1. 使用shell命令

$ sshpass -p ${passwd} ssh -p ${port} -l ${user} -o StrictHostKeyChecking=no xx.xx.xx.xx "ls -l"

然后你會發(fā)現(xiàn),你的輸出有很多你并不需要,但是又不去不掉的一些信息。
對于shell 命令,可以直接使用管道,或者將標準輸出重定向到文件的方法取得執(zhí)行結果。

2. 使用 subprocess

通過Python可以想到使用 os.popen,os.system,commands,subprocess 等一些命令執(zhí)行庫來間接獲取系統(tǒng)信息 。這些庫獲取的 output 不僅有標準輸出,還包含標準錯誤信息。所以每次都要對 output 進行數(shù)據(jù)清理,然后整理格式化,才能得到我們想要的數(shù)據(jù)。

import subprocess 
ssh_cmd = "sshpass -p ${passwd} ssh -p 22 -l root -o StrictHostKeyChecking=no xx.xx.xx.xx 'ls -l'" 
status, output = subprocess.getstatusoutput(ssh_cmd) 
# 數(shù)據(jù)清理

總之,間接使用ssh命令的幾個問題:

需要額外安裝 sshpass(如果不免密的話)
干擾信息太多,數(shù)據(jù)清理、格式化相當麻煩
代碼實現(xiàn)不夠優(yōu)雅,可讀性太差
ssh 連接不能復用,一次連接僅能執(zhí)行一次命令
代碼無法全平臺,僅能在 Linux 和 OSX 上使用

3. 使用Paramiko

安裝

python3 -m pip install paramiko

方法1:基于用戶名和密碼的 sshclient 方式登錄

該方法無法復用ssh連接。

import paramiko 
ssh = paramiko.SSHClient() 
# 允許連接不在know_hosts文件中的主機 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
# 建立連接 
ssh.connect("xx.xx.xx.xx", username="root", port=22, password="you_password") 
# 使用這個連接執(zhí)行命令 
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l") 
# 獲取輸出 
print(ssh_stdout.read()) 
# 關閉連接 
ssh.close() 

方法2:基于用戶名和密碼的 transport 方式登錄

該方法可以復用連接。

import paramiko 
# 建立連接 
trans = paramiko.Transport(("xx.xx.xx.xx", 22)) 
trans.connect(username="root", password="you_passwd") 
ssh = paramiko.SSHClient() 
ssh._transport = trans 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("ls -l") 
print(ssh_stdout.read()) 
# 關閉連接 
trans.close()

方法3:基于公鑰的 SSHClient 方式登錄

該方法無法復用ssh連接。

import paramiko 
# 指定本地的RSA私鑰文件 
# 如果建立密鑰對時設置了密碼,password為passphrase。如果沒有passphrase則無需指定password參數(shù)。
pkey = paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa', password='12345') 
# 建立連接 
ssh = paramiko.SSHClient() 
ssh.connect(hostname='xx.xx.xx.xx', 
      port=22, 
      username='you_username', 
      pkey=pkey) 
# 執(zhí)行命令 
stdin, stdout, stderr = ssh.exec_command('ls -l') 
# 結果放到stdout中,如果有錯誤將放到stderr中 
print(stdout.read()) 
# 關閉連接 
ssh.close() 

方法4:基于公鑰的 Transport 方式登錄

該方法可以復用連接。

import paramiko 
# 指定本地的RSA私鑰文件 
# 如果建立密鑰對時設置了密碼,password為passphrase。如果沒有passphrase則無需指定password參數(shù)。 
pkey = paramiko.RSAKey.from_private_key_file('/home/you_username/.ssh/id_rsa', password='12345') 
# 建立連接 
trans = paramiko.Transport(('xx.xx.xx.xx', 22)) 
trans.connect(username='you_username', pkey=pkey) 
ssh = paramiko.SSHClient() 
ssh._transport = trans 
# 執(zhí)行命令,和傳統(tǒng)方法一樣 
stdin, stdout, stderr = ssh.exec_command('df -hl') 
print(stdout.read().decode()) 
# 關閉連接 
trans.close() 

sftp 文件傳輸

import paramiko 
trans = paramiko.Transport(('xx.xx.xx.xx', 22)) 
# 建立連接 
trans.connect(username='you_username', password='you_passwd') 
# 實例化一個 sftp對象,指定連接的通道 
sftp = paramiko.SFTPClient.from_transport(trans) 
# 發(fā)送文件 
sftp.put(localpath='/tmp/11.txt', remotepath='/tmp/22.txt') 
# 下載文件 
sftp.get(remotepath='/tmp/22.txt', localpath='/tmp/33.txt') 
trans.close() 

參考

https://www.linuxprobe.com/log-in-to-remote-service-python.html

總結

到此這篇關于借助Paramiko通過Python實現(xiàn)linux遠程登陸及sftp的操作的文章就介紹到這了,更多相關python paramiko實現(xiàn)遠程登陸 sftp內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

武平县| 平武县| 花莲县| 新化县| 景宁| 滕州市| 贵定县| 大方县| 荥阳市| 察哈| 昌平区| 长丰县| 大姚县| 湘潭市| 丁青县| 玉溪市| 宜君县| 敦化市| 崇州市| 信丰县| 托克托县| 汕头市| 建瓯市| 正宁县| 界首市| 水城县| 宿州市| 瑞昌市| 应城市| 保靖县| 邮箱| 平度市| 铁岭县| 宜兴市| 塔城市| 尼玛县| 河津市| 祁门县| 岚皋县| 泽普县| 泰来县|