婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

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

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

熱門標簽:賓館能在百度地圖標注嗎 電銷機器人 金倫通信 鄭州智能外呼系統中心 汕頭電商外呼系統供應商 400電話 申請 條件 云南地圖標注 北京外呼電銷機器人招商 南京crm外呼系統排名 crm電銷機器人

楔子

我們使用 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

# 實例化 SSHClient
client = 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 獲取執行的結果
# 但是返回的是字節, 所以需要先獲取對應的編碼, 然后再進行 decode
print(stdout.read().decode("utf-8"))
"""
bin
boot
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var

"""
# 最后關閉 SSHClient 對象
client.close()

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

import paramiko

client = 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 和 password
transport.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/bin
sftp.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")) # False
sftp.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 和 transport
sftp.close()
transport.close()

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

import paramiko

client = 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自動下載網站所有文件
  • Python解析m3u8拼接下載mp4視頻文件的示例代碼
  • python爬蟲智能翻頁批量下載文件的實例詳解
  • python 下載文件的幾種方法匯總
  • python 基于selectors庫實現文件上傳與下載
  • Python實現FTP文件定時自動下載的步驟
  • Python 使用SFTP和FTP實現對服務器的文件下載功能
  • python從ftp獲取文件并下載到本地
  • Python根據URL地址下載文件并保存至對應目錄的實現
  • python 下載文件的幾種方式分享

標簽:浙江 石家莊 錫林郭勒盟 文山 西寧 懷化 梅州 昆明

巨人網絡通訊聲明:本文標題《python基于paramiko庫遠程執行 SSH 命令,實現 sftp 下載文件》,本文關鍵詞  python,基于,paramiko,庫,遠程,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《python基于paramiko庫遠程執行 SSH 命令,實現 sftp 下載文件》相關的同類信息!
  • 本頁收集關于python基于paramiko庫遠程執行 SSH 命令,實現 sftp 下載文件的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    99精品黄色片免费大全| 亚洲bt欧美bt精品| 久久精品亚洲乱码伦伦中文| 欧美日韩一区在线| 欧美日韩国产欧美日美国产精品| 色先锋资源久久综合| 日本韩国欧美国产| 在线不卡的av| 精品国产三级电影在线观看| 久久久久久久久久电影| 国产色一区二区| 中文字幕av在线一区二区三区| 中文字幕一区二区三区在线播放 | 国产suv精品一区二区883| 国产麻豆精品久久一二三| 国产精品亚洲人在线观看| 国产自产视频一区二区三区| 国产999精品久久久久久绿帽| 91亚洲国产成人精品一区二区三 | 成人h动漫精品一区二| 粉嫩嫩av羞羞动漫久久久| 色婷婷av一区二区三区软件| 欧美高清hd18日本| 国产午夜精品久久久久久免费视| 亚洲欧美激情一区二区| 日韩精品1区2区3区| 国产精品一二二区| 欧美日韩一二三| 久久夜色精品一区| 亚洲国产精品欧美一二99| 韩国毛片一区二区三区| 成+人+亚洲+综合天堂| 欧美日韩精品一区二区三区蜜桃| 欧美一级一区二区| 一区二区三区精品视频| 久久国产日韩欧美精品| 91丨九色丨蝌蚪丨老版| 欧美成人aa大片| 亚洲日本一区二区三区| 麻豆国产精品777777在线| hitomi一区二区三区精品| 91精品国产综合久久小美女| 国产精品对白交换视频| 视频一区中文字幕| 99久久久无码国产精品| 久久精品免费在线观看| 日本三级亚洲精品| 91麻豆国产香蕉久久精品| 国产欧美日本一区视频| 青青青伊人色综合久久| 欧美亚日韩国产aⅴ精品中极品| 久久亚洲捆绑美女| 日韩高清不卡一区二区三区| 色偷偷久久一区二区三区| 久久精品亚洲一区二区三区浴池| 日韩中文欧美在线| 色欧美片视频在线观看在线视频| 久久视频一区二区| 国内精品久久久久影院色| 日韩你懂的电影在线观看| 亚洲成人1区2区| 在线观看一区日韩| 亚洲精品国产第一综合99久久| 国产91露脸合集magnet| 久久久综合激的五月天| 国产精品一区在线观看乱码| 日韩欧美中文字幕一区| 日韩av成人高清| 日韩一区二区三区视频| 热久久免费视频| 欧美一级片在线观看| 日韩精品高清不卡| 欧美一级生活片| 老司机精品视频在线| 欧美www视频| 青青草国产精品亚洲专区无| 91精品国产麻豆国产自产在线| 轻轻草成人在线| 久久综合色之久久综合| 国产白丝网站精品污在线入口| 国产午夜亚洲精品理论片色戒| 国产精品乡下勾搭老头1| 欧美国产日产图区| 一本色道久久综合狠狠躁的推荐| 中文字幕一区二区三区av| 日本精品一级二级| 秋霞午夜av一区二区三区| 精品999在线播放| 粉嫩欧美一区二区三区高清影视| 亚洲啪啪综合av一区二区三区| 在线精品视频一区二区三四| 天天操天天色综合| 精品女同一区二区| 91在线免费播放| 亚洲成a人片在线观看中文| 欧美一级黄色录像| 丁香桃色午夜亚洲一区二区三区| 亚洲三级免费电影| 欧美一区二区啪啪| www.成人在线| 视频一区二区欧美| 国产欧美日韩另类一区| 欧美在线不卡视频| 久久不见久久见中文字幕免费| 国产精品萝li| 欧美一区二区日韩| 99视频精品在线| 免费在线观看一区二区三区| 国产网站一区二区| 91精品国产91热久久久做人人 | 亚洲高清免费在线| 欧美极品少妇xxxxⅹ高跟鞋 | 亚洲高清免费观看| 日本一区二区三区四区| 91精品国产综合久久久久| 成人手机在线视频| 久久99久久久久| 亚洲黄色性网站| 国产夜色精品一区二区av| 欧美久久一二区| 91尤物视频在线观看| 国产精品资源在线| 婷婷开心激情综合| 亚洲精品久久久蜜桃| 亚洲精品一区二区三区影院| 91传媒视频在线播放| 成人精品国产一区二区4080| 日av在线不卡| 图片区小说区区亚洲影院| 中文字幕一区二区三区不卡在线| 久久一留热品黄| 日韩欧美一级二级三级久久久| 欧美色图免费看| 色婷婷亚洲精品| 97se亚洲国产综合自在线 | 丝袜美腿亚洲一区二区图片| 国产精品二三区| 国产精品日韩精品欧美在线| 久久综合色鬼综合色| 日韩精品一区二区三区中文不卡| 91麻豆精品国产91久久久资源速度 | av高清不卡在线| 成人一级视频在线观看| 国产精品小仙女| 国产精品亚洲第一区在线暖暖韩国| 日本sm残虐另类| 久久er99热精品一区二区| 视频一区视频二区中文| 免费观看在线色综合| 日本欧美一区二区| 久久超级碰视频| 国产精选一区二区三区| 成人免费视频一区| 成人a级免费电影| av成人免费在线观看| 91日韩在线专区| 欧洲一区二区三区免费视频| 欧美午夜在线一二页| 欧美日韩一区二区三区四区五区 | 国产婷婷精品av在线| 国产精品美女久久久久久| 亚洲欧洲一区二区三区| 亚洲精品精品亚洲| 午夜精品久久久久久久99水蜜桃| 五月综合激情网| 美女精品一区二区| 国产一区二区三区免费观看| av一二三不卡影片| 欧美亚洲丝袜传媒另类| 日韩一区二区精品葵司在线| 久久久久久久一区| 亚洲免费观看高清完整版在线观看熊 | 午夜视频在线观看一区二区三区| 石原莉奈一区二区三区在线观看| 久久精品国产亚洲高清剧情介绍| 国产一区二区免费看| 一本一道久久a久久精品| 欧美一级在线免费| 国产精品久久久久aaaa| 亚洲在线一区二区三区| 韩国午夜理伦三级不卡影院| 99久久国产综合精品麻豆| 5566中文字幕一区二区电影| 国产午夜三级一区二区三| 亚洲综合丁香婷婷六月香| 精品亚洲国内自在自线福利| 97久久精品人人做人人爽| 91精品国产手机| 亚洲激情av在线| 国产在线一区观看| 欧美亚一区二区| 亚洲国产精品成人综合色在线婷婷 | 欧美老肥妇做.爰bbww视频| 精品国产制服丝袜高跟| 一区二区三区在线不卡| 国产呦精品一区二区三区网站| 欧美日韩成人综合天天影院| 中文字幕在线一区免费| 国产一区二区在线观看视频| 欧美美女激情18p|