日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

python基于paramiko庫遠程執行 SSH 命令,實現 sftp 下載文件

瀏覽:27日期:2022-06-25 18:14:54
楔子

我們使用 Python 避免不了和 Linux 打交道,而有時我們需要執行一些 shell 命令。如果在本地的話,那么可以通過調用 os.system 或者 subprocess.Popen 來執行,但如果我們希望遠程執行其它機器上的 shell 命令,這個時候該怎么做呢?下面我們就來推薦一個第三方庫 paramiko,看看如何使用 Python 遠程操作其它機器。

paramiko

網絡傳輸是遵循協議的,比如 SSH,paramiko 則是實現了 SSHv2 協議的一個 Python 第三方庫(底層使用的是 cryptography)。有了 paramiko 之后,我們便可以通過 Python 使用 SSH 協議來連接遠程服務器執行操作,和 xshell 本質上是類似的。

注意:我們在 Python 代碼中是直接通過 SSH 協議對遠程服務器執行操作,而不是調用 ssh 命令對遠程服務器進行操作。

既然要使用,那么首先要安裝,直接 pip install paramiko 即可。

paramiko 包含兩大核心組件:SSHClient 和 SFTPClient

SSHClient 的作用類似于 Linux 下的 ssh 命令,是對 SSH 會話的封裝,通常用于執行遠程命令。

SFTPClient 的作用類似于 Linux 下的 sftp 命令,是對 SFTP 客戶端的封裝,用于實現遠程文件的操作。比如:文件上傳,下載、修改文件權限等操作。

下面我們就來介紹它們的用法。

SSHClient 的使用

首先創建一個客戶端實例, client = paramiko.SSHClient(),然后這個 client 下有很多方法。

connect:實現遠程服務器的連接與認證

def connect( self, hostname, port=SSH_PORT, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None, auth_timeout=None, gss_trust_dns=True, passphrase=None, disabled_algorithms=None,): ''''''

里面參數很多,但常用的參數如下:

hostname:連接的目的主機, 這個參數是必須的 port=SSH_PORT:指定的端口, 默認是 22 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:當遠程服務器沒有本地秘鑰或 HostKeys 對象時的應對策略,目前支持三種: AutoAddPolicy:自動添加主機名以及主機秘鑰到本地 HostKeys 對象, 不依賴 load_system_host_key 的配置, 即新建立 ssh 連接時不需要再輸入 yes 或 no 進行確認 WarningPolicy:用于記錄一個未知的主機秘鑰的 Python 警告、并且接收; 所以它的功能和 AutoAddPolicy 是類似的, 只不過會提示這是新連接 RejectPolicy:自動拒絕未知的主機名和秘鑰, 依賴 load_system_host_key 的配置, 該選項為默認選項

所以我們一般都會將策略改成 AutoAddPolicy,不然還需要在本地進行配置。

exec_command:遠程執行的具體 Linux 命令

open_sftp:在當前 ssh 會話的基礎上創建一個 sftp 會話,該方法會返回一個 SFTPClient 對象,可以執行文件的上傳、下載等操作。我們后面在 SFTPClient 的時候會說。

下面我們來演示一下:

import paramiko# 實例化 SSHClientclient = paramiko.SSHClient()# 自動添加策略, 保存服務器的主機名和密鑰信息; 如果不添加, 那么不再本地 know_hosts 文件中的主機將無法連接client.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 連接 SSH 服務端, 通過用戶名和密碼進行認證# 該過程會創建一個 session, 它是 client 和 server 保持連接的對象client.connect(hostname=’47.94.174.89’, port=22, username=’root’, password=’xxxxxxx’)# 執行遠程命令, 該方法會打開一個 paramiko.Channel 對象(類 socket, 一種安全的 SSH 傳輸通道)# 會返回三個值, 分別是 stdin(標準輸入)、stdout(標準輸出)、stderr(錯誤輸出)stdin, stdout, stderr = client.exec_command('ls /')# 打印執行結果, 顯然我們要通過 stdout 來查看, 我們可以調用 stdout.read 獲取執行的結果# 但是返回的是字節, 所以需要先獲取對應的編碼, 然后再進行 decodeprint(stdout.read().decode('utf-8'))'''binbootdevetchomeliblib64lost+foundmediamntoptprocrootrunsbinsrvsystmpusrvar'''# 最后關閉 SSHClient 對象client.close()

還是很簡單的,如果我們輸入了一條錯誤的命令,那么 stdout 里面就不會有內容了,因為錯誤信息會保存是在 stderr 中。

import paramikoclient = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(hostname=’47.94.174.89’, port=22, username=’root’, password=’xxxxxxx’)stdin, stdout, stderr = client.exec_command('xxxxx')print(stderr.read().decode('utf-8'))'''bash: xxxxx: command not found'''client.close()SFTPClient 的使用

SFTPClient 作為一個 sftp 的客戶端對象,根據 ssh 傳輸協議的 sftp 會話,可以實現遠程文件的操作,例如:上傳、下載、查看權限和狀態等等。

import paramiko# 創建一個 Transport 對象, 使用時會同步創建一個 paramiko.Channel 對象# 參數傳遞一個由 IP 和 PORT 組成的元組即可transport = paramiko.Transport(('47.94.174.89', 22))# 連接 ssh, 通過 username 和 passwordtransport.connect(username='root', password='xxxxxxx')# 獲取 SFTPClient 實例, 它便相當于 Linux 下的 sftp, 我們通過它可以進行文件的一些操作sftp = paramiko.SFTPClient.from_transport(transport)

以上我們便得到的 sftp,那么它都支持哪些操作呢?

put(self, localpath, remotepath, callback=None, confirm=True):將本地文件上傳到服務器, callback 表示回調函數, 上傳成功后調用; confirm 表示是否調用 stat 方法檢查文件狀態, 返回 ls -l 的結果 get(self, remotepath, localpath, callback=None):將文件從服務器下載到本地 mkdir(self, path, mode=o777):在服務器上創建目錄, mode 表示權限, 默認為 511(o777 是一個變量, 等于 511) rmdir(self, path):刪除服務器上的目錄 remove(self, path):刪除服務器上的文件 rename(self, oldpath, newpath):對服務器上目錄進行重命名 stat(self, path):查看文件或目錄的狀態 listdir(self, path=’.’):列出服務器目錄下的文件 getcwd(self):查看工作區, 也就是當前所在路徑 chmod(self, path, mode):改變權限 chown(self, path, uid, gid): 改變用戶和組 chdir(self, path):改變工作區

常用的大概以上這些,我們來演示一下。

# 1. 改變工作區sftp.chdir('/usr/local/bin')# 2. 查看工作區print(sftp.getcwd()) # /usr/local/binsftp.chdir('/root')print(sftp.getcwd()) # /root'''如果不調用 sftp.chdir(path) 的時候, 那么打印 sftp.getcwd() 時結果為 None但我們知道登陸 Linux 時, 默認會在 /root 目錄(對于 root 用戶而言)對于當前的 sftp 而言也確實如此, 只不過打印 sftp.getcwd() 的時候結果為 None 罷了 '''# 3. 列出當前目錄下的文件print(sftp.listdir('/usr/local')) # [’lib’, ’lib64’, ’games’, ’aegis’, ...]# 4. 查看文件或目錄狀態print(sftp.stat('/root/.ssh/authorized_keys'))'''-rw------- 1 0 0 0 16 Dec 13:26 ?'''# 5. 改變權限sftp.chmod('/root/.ssh/authorized_keys', 0o777)print(sftp.stat('/root/.ssh/authorized_keys'))'''-rwxrwxrwx 1 0 0 0 16 Dec 13:26 ?'''# 6. 創建目錄print('dir' in sftp.listdir('/root')) # Falsesftp.mkdir('/root/dir', mode=0o777)print('dir' in sftp.listdir('/root')) # True# 7. 刪除目錄sftp.rmdir('/root/dir')print('dir' in sftp.listdir('/root')) # False# 8. 刪除文件sftp.remove('/root/1.py')# 9. 下載文件sftp.get('/root/makefile', r'makefile')# 10. 上傳文件sftp.put('dockerfile', '/root/dockerfile')# 最后關閉 sftp 和 transportsftp.close()transport.close()

當然我們在介紹 SSHClient 的時候說過,還可以通過 open_sftp 的方式來創建 sftp 客戶端。

import paramikoclient = paramiko.SSHClient()client.set_missing_host_key_policy(paramiko.AutoAddPolicy())client.connect(hostname=’47.94.174.89’, port=22, username=’root’, password=’xxxxxxx’)# 這種方式創建也是可以的sftp = client.open_sftp()

以上就是python基于paramiko庫遠程執行 SSH 命令,實現 sftp 下載文件的詳細內容,更多關于python paramiko庫的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
av高清一区| 精品美女在线视频| 麻豆视频在线观看免费网站黄 | 久久精品 人人爱| 婷婷综合在线| 亚州国产精品| 久久久久国产一区二区| 亚洲精品美女| 日本黄色精品| 亚洲尤物在线| 国产日韩一区二区三免费高清| 亚洲另类黄色| 亚洲ab电影| 日韩午夜在线| 日韩高清一级| 中文亚洲欧美| 一区在线视频观看| 中文字幕成在线观看| 日本国产欧美| 中文久久精品| 日本精品在线播放| 国产精品久久久久77777丨| 成人午夜在线| 欧美 日韩 国产精品免费观看| 久久在线免费| 视频一区日韩精品| 国产精品v一区二区三区| 午夜久久中文| 99riav国产精品| 日韩一区二区三区在线看| 欧美日韩亚洲一区| 久久不见久久见国语| 亚洲一区资源| 色天使综合视频| 国产亚洲久久| 国产福利91精品一区二区| 久久精品国产www456c0m| 国产精品女主播一区二区三区| 久久国内精品自在自线400部| 精品精品国产三级a∨在线| 久久婷婷一区| 日韩精品亚洲专区| 91日韩免费| 视频一区二区三区在线| 久久99影视| 亚洲精品高潮| 色黄视频在线观看| 一区二区三区网站| 日韩精品dvd| 日韩一区精品字幕| 成人午夜毛片| 欧美在线资源| 国产精品亚洲一区二区在线观看| 99久久九九| 国产精品xvideos88| 亚洲少妇在线| 欧美羞羞视频| 国产精品成人国产| 蜜桃av一区二区在线观看| 青青青免费在线视频| 国产欧美自拍一区| 免费在线观看成人| 少妇精品导航| 精品亚洲自拍| 亚洲欧美在线综合| 91精品一区二区三区综合在线爱| 国产精品高潮呻吟久久久久| 亚洲欧美久久久| 不卡视频在线| 日韩一区二区三区在线免费观看| 国产精品亚洲片在线播放| 日韩有吗在线观看| 亚洲在线电影| 日韩欧美看国产| 91视频一区| 国产极品久久久久久久久波多结野| 老司机久久99久久精品播放免费| 久久久影院免费| 日韩专区精品| 久久电影tv| 日本不卡视频一二三区| 欧美大黑bbbbbbbbb在线| 黄色在线观看www| 国内自拍视频一区二区三区| 亚洲免费毛片| 日韩午夜视频在线| 热久久免费视频| 日本大胆欧美人术艺术动态| 日韩欧美一区二区三区在线观看| 97在线精品| 日韩av电影一区| 日韩在线黄色| 另类av一区二区| 久久亚洲不卡| 亚洲精品中文字幕乱码| 日韩电影二区| 精品国产一区二| 国产精品一区二区精品视频观看| 蜜桃视频一区二区三区| 偷拍亚洲精品| 亚洲一区日韩| 伊人久久亚洲| 欧美日韩国产欧| 亚洲作爱视频| 性欧美69xoxoxoxo| 久久亚洲欧洲| 每日更新成人在线视频| 日韩avvvv在线播放| 最新亚洲国产| 国产日韩欧美高清免费| 性色一区二区| 精品一区三区| 久久久精品久久久久久96| 91精品一区二区三区综合| 中文在线中文资源| 免费视频国产一区| 亚洲成人av观看| 国产精品美女久久久浪潮软件| 久久久国产精品一区二区中文| 99久久精品费精品国产| sm捆绑调教国产免费网站在线观看 | 亚洲欧美日韩国产一区二区| 日韩中文视频| 亚洲免费网址| 激情欧美一区二区三区| 一区二区高清| 欧美在线日韩| 嫩呦国产一区二区三区av| 色天使综合视频| 久久久成人网| 日韩欧美2区| 国产三级一区| 91欧美在线| 日韩精品首页| 午夜亚洲福利| 国产乱人伦丫前精品视频| 精品72久久久久中文字幕| 久久精品国产一区二区| 国模 一区 二区 三区| 亚洲女人av| 精品久久福利| 久久男人av资源站| 伊人www22综合色| 欧美日本二区| 在线日韩欧美| 亚洲欧美日韩精品一区二区| 欧美视频一区| 国产aⅴ精品一区二区三区久久| 美女少妇全过程你懂的久久| 麻豆亚洲精品| 精品视频一区二区三区在线观看 | 在线精品视频在线观看高清| 好看不卡的中文字幕| 久久国产精品色av免费看| 精品中国亚洲| 蜜桃久久久久久久| 国产精品视频一区二区三区综合| 99热精品久久| 蜜臀av一区二区三区| 丰满少妇一区| 99精品在线| 麻豆国产欧美一区二区三区| 麻豆久久久久久久| 一本综合精品| 国产suv精品一区| 国产午夜精品一区二区三区欧美 | 里番精品3d一二三区| 日韩午夜电影| 国产精品久久乐| 亚洲一区欧美二区| 国产精品v亚洲精品v日韩精品| 午夜在线一区| 欧美视频久久| 蜜臀久久99精品久久久久久9| 国产美女亚洲精品7777| 91精品福利| 日本色综合中文字幕| 亚洲欧美激情诱惑| 国产成人精品免费视| 91精品国产一区二区在线观看| 日韩成人精品一区二区三区| 蜜臀va亚洲va欧美va天堂| 麻豆视频久久| 国产午夜精品一区二区三区欧美| 国产精品videossex久久发布| 99热精品久久| 欧美激情网址| 亚洲欧洲午夜| 久久九九精品| 首页亚洲欧美制服丝腿| 成人小电影网站| 给我免费播放日韩视频| 日本在线一区二区三区| 欧美综合国产| 免费福利视频一区二区三区| 国产+成+人+亚洲欧洲在线| 91麻豆精品| 青青青国产精品| 亚洲欧美日韩综合国产aⅴ| 午夜欧美精品|