校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > python基于paramiko庫遠程執(zhí)行 SSH 命令,實現(xiàn) sftp 下載文件

python基于paramiko庫遠程執(zhí)行 SSH 命令,實現(xiàn) sftp 下載文件

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

楔子

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

paramiko

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

注意:我們在 Python 代碼中是直接通過 SSH 協(xié)議對遠程服務(wù)器執(zhí)行操作,而不是調(diào)用 ssh 命令對遠程服務(wù)器進行操作。

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

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

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

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

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

SSHClient 的使用

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

connect:實現(xiàn)遠程服務(wù)器的連接與認證

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,
):
 """"""

里面參數(shù)很多,但常用的參數(shù)如下:

  • hostname:連接的目的主機, 這個參數(shù)是必須的
  • 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:當遠程服務(wù)器沒有本地秘鑰或 HostKeys 對象時的應(yīng)對策略,目前支持三種:

  • AutoAddPolicy:自動添加主機名以及主機秘鑰到本地 HostKeys 對象, 不依賴 load_system_host_key 的配置, 即新建立 ssh 連接時不需要再輸入 yes 或 no 進行確認
  • WarningPolicy:用于記錄一個未知的主機秘鑰的 Python 警告、并且接收; 所以它的功能和 AutoAddPolicy 是類似的, 只不過會提示這是新連接
  • RejectPolicy:自動拒絕未知的主機名和秘鑰, 依賴 load_system_host_key 的配置, 該選項為默認選項

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

exec_command:遠程執(zhí)行的具體 Linux 命令

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

下面我們來演示一下:

import paramiko

# 實例化 SSHClient
client = paramiko.SSHClient()

# 自動添加策略, 保存服務(wù)器的主機名和密鑰信息; 如果不添加, 那么不再本地 know_hosts 文件中的主機將無法連接
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 連接 SSH 服務(wù)端, 通過用戶名和密碼進行認證
# 該過程會創(chuàng)建一個 session, 它是 client 和 server 保持連接的對象
client.connect(hostname='47.94.174.89', port=22, username='root', password='xxxxxxx')

# 執(zhí)行遠程命令, 該方法會打開一個 paramiko.Channel 對象(類 socket, 一種安全的 SSH 傳輸通道)
# 會返回三個值, 分別是 stdin(標準輸入)、stdout(標準輸出)、stderr(錯誤輸出)
stdin, stdout, stderr = client.exec_command("ls /")

# 打印執(zhí)行結(jié)果, 顯然我們要通過 stdout 來查看, 我們可以調(diào)用 stdout.read 獲取執(zhí)行的結(jié)果
# 但是返回的是字節(jié), 所以需要先獲取對應(yīng)的編碼, 然后再進行 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

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

還是很簡單的,如果我們輸入了一條錯誤的命令,那么 stdout 里面就不會有內(nèi)容了,因為錯誤信息會保存是在 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 的客戶端對象,根據(jù) ssh 傳輸協(xié)議的 sftp 會話,可以實現(xiàn)遠程文件的操作,例如:上傳、下載、查看權(quán)限和狀態(tài)等等。

import paramiko

# 創(chuàng)建一個 Transport 對象, 使用時會同步創(chuàng)建一個 paramiko.Channel 對象
# 參數(shù)傳遞一個由 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):將本地文件上傳到服務(wù)器, callback 表示回調(diào)函數(shù), 上傳成功后調(diào)用; confirm 表示是否調(diào)用 stat 方法檢查文件狀態(tài), 返回 ls -l 的結(jié)果
  • get(self, remotepath, localpath, callback=None):將文件從服務(wù)器下載到本地
  • mkdir(self, path, mode=o777):在服務(wù)器上創(chuàng)建目錄, mode 表示權(quán)限, 默認為 511(o777 是一個變量, 等于 511)
  • rmdir(self, path):刪除服務(wù)器上的目錄
  • remove(self, path):刪除服務(wù)器上的文件
  • rename(self, oldpath, newpath):對服務(wù)器上目錄進行重命名
  • stat(self, path):查看文件或目錄的狀態(tài)
  • listdir(self, path='.'):列出服務(wù)器目錄下的文件
  • getcwd(self):查看工作區(qū), 也就是當前所在路徑
  • chmod(self, path, mode):改變權(quán)限
  • chown(self, path, uid, gid): 改變用戶和組
  • chdir(self, path):改變工作區(qū)

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

# 1. 改變工作區(qū)
sftp.chdir("/usr/local/bin")

# 2. 查看工作區(qū)
print(sftp.getcwd()) # /usr/local/bin
sftp.chdir("/root")
print(sftp.getcwd()) # /root
"""
如果不調(diào)用 sftp.chdir(path) 的時候, 那么打印 sftp.getcwd() 時結(jié)果為 None
但我們知道登陸 Linux 時, 默認會在 /root 目錄(對于 root 用戶而言)
對于當前的 sftp 而言也確實如此, 只不過打印 sftp.getcwd() 的時候結(jié)果為 None 罷了 
"""

# 3. 列出當前目錄下的文件
print(sftp.listdir("/usr/local")) # ['lib', 'lib64', 'games', 'aegis', ...]

# 4. 查看文件或目錄狀態(tài)
print(sftp.stat("/root/.ssh/authorized_keys"))
"""
-rw------- 1 0  0    0 16 Dec 13:26 ?
"""

# 5. 改變權(quán)限
sftp.chmod("/root/.ssh/authorized_keys", 0o777)
print(sftp.stat("/root/.ssh/authorized_keys"))
"""
-rwxrwxrwx 1 0  0    0 16 Dec 13:26 ?
"""

# 6. 創(chuàng)建目錄
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")

# 最后關(guān)閉 sftp 和 transport
sftp.close()
transport.close()

當然我們在介紹 SSHClient 的時候說過,還可以通過 open_sftp 的方式來創(chuàng)建 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')
# 這種方式創(chuàng)建也是可以的
sftp = client.open_sftp()

以上就是python基于paramiko庫遠程執(zhí)行 SSH 命令,實現(xiàn) sftp 下載文件的詳細內(nèi)容,更多關(guān)于python paramiko庫的資料請關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:
  • 用Python自動下載網(wǎng)站所有文件
  • Python解析m3u8拼接下載mp4視頻文件的示例代碼
  • python爬蟲智能翻頁批量下載文件的實例詳解
  • python 下載文件的幾種方法匯總
  • python 基于selectors庫實現(xiàn)文件上傳與下載
  • Python實現(xiàn)FTP文件定時自動下載的步驟
  • Python 使用SFTP和FTP實現(xiàn)對服務(wù)器的文件下載功能
  • python從ftp獲取文件并下載到本地
  • Python根據(jù)URL地址下載文件并保存至對應(yīng)目錄的實現(xiàn)
  • python 下載文件的幾種方式分享

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

巨人網(wǎng)絡(luò)通訊聲明:本文標題《python基于paramiko庫遠程執(zhí)行 SSH 命令,實現(xiàn) sftp 下載文件》,本文關(guān)鍵詞  python,基于,paramiko,庫,遠程,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《python基于paramiko庫遠程執(zhí)行 SSH 命令,實現(xiàn) sftp 下載文件》相關(guān)的同類信息!
  • 本頁收集關(guān)于python基于paramiko庫遠程執(zhí)行 SSH 命令,實現(xiàn) sftp 下載文件的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91亚洲永久精品| 成人综合在线观看| 97精品超碰一区二区三区| 日韩精品电影一区亚洲| 一本色道久久综合精品竹菊| 欧美日韩国产美女| 中文字幕精品一区| 日本麻豆一区二区三区视频| 日韩欧美在线123| 中文字幕在线观看一区| 久久激情五月激情| 欧美日韩精品系列| 亚洲精品中文在线影院| 成人app在线观看| 精品国产露脸精彩对白| 日本人妖一区二区| 欧美日韩中文一区| 亚洲欧美日韩中文字幕一区二区三区| 精品在线免费观看| 日韩女优av电影| 日本不卡视频在线| 88在线观看91蜜桃国自产| 亚洲精品久久7777| 色国产综合视频| 国产精品国产三级国产普通话蜜臀 | 亚洲成在线观看| 一本久道中文字幕精品亚洲嫩| 亚洲国产精品二十页| 国产精品一品二品| 国产日本欧洲亚洲| 国产99久久久国产精品潘金| 国产午夜一区二区三区| 国产一区二区精品在线观看| 久久网站最新地址| 国产精品亚洲人在线观看| 精品福利二区三区| 国产精品一区二区视频| 日本一区二区视频在线观看| 成人午夜av影视| 专区另类欧美日韩| 欧美在线观看禁18| 欧美aaaaaa午夜精品| 精品三级av在线| 国产大陆a不卡| 亚洲色图都市小说| 欧美日韩一区在线观看| 日本不卡一区二区三区| 欧美日韩精品欧美日韩精品一| 国产精品热久久久久夜色精品三区| 中文字幕在线视频一区| 国产电影一区在线| av高清久久久| 7777女厕盗摄久久久| 欧美一区二区在线观看| 精品粉嫩超白一线天av| 亚洲男人电影天堂| 亚洲综合免费观看高清完整版 | 亚洲你懂的在线视频| 国产精品乡下勾搭老头1| 国产精品久久久一本精品| 色悠悠亚洲一区二区| 午夜电影一区二区| 欧美极品美女视频| 欧美日韩精品综合在线| 国产一区二区三区美女| 亚洲人快播电影网| 欧美成人精品1314www| 成人av在线资源| 图片区日韩欧美亚洲| 久久久久久久久久久电影| 欧美这里有精品| 国产真实乱子伦精品视频| 一区二区三区四区蜜桃| 日韩午夜精品电影| 91在线精品秘密一区二区| 日本伊人色综合网| 亚洲精品日韩一| 精品少妇一区二区三区免费观看| 97久久精品人人做人人爽50路 | 精品免费视频.| 色偷偷88欧美精品久久久| 国产在线精品一区二区三区不卡| 亚洲视频免费观看| 国产午夜精品一区二区三区视频 | 日韩欧美高清dvd碟片| 波多野洁衣一区| 国内精品写真在线观看| 午夜不卡av免费| 亚洲欧美区自拍先锋| 国产色91在线| 精品久久免费看| 欧美一级一区二区| 欧美性猛交xxxx乱大交退制版| 国产99一区视频免费| 久久99国产精品久久99果冻传媒| 亚洲一区在线视频| 亚洲尤物视频在线| 中文字幕综合网| 中文字幕高清一区| 久久久久久综合| 欧美成人激情免费网| 777久久久精品| 欧美区在线观看| www.日韩大片| 国产精品福利一区二区三区| 国产亚洲欧美激情| www国产亚洲精品久久麻豆| 成人国产精品免费观看视频| 亚洲成人黄色影院| 中文字幕精品一区二区精品绿巨人 | 884aa四虎影成人精品一区| 成人免费黄色在线| 日韩精品免费视频人成| 一区二区三区在线不卡| 日韩一区有码在线| 中文字幕中文字幕一区二区 | 人禽交欧美网站| 蜜桃av一区二区在线观看| 免费国产亚洲视频| 精品一区二区三区免费观看| 久久精品国产久精国产爱| 精品影视av免费| 国产精品资源在线看| 丰满放荡岳乱妇91ww| 成人激情文学综合网| 91无套直看片红桃| 欧美综合天天夜夜久久| 欧美老肥妇做.爰bbww视频| 欧美一区日韩一区| 久久中文娱乐网| 亚洲欧洲日韩女同| 午夜久久久久久久久| 久久国产乱子精品免费女| 国产综合久久久久久久久久久久| 国产成人精品综合在线观看| thepron国产精品| 欧美最新大片在线看 | 日韩av电影天堂| 精品无码三级在线观看视频| 国产91露脸合集magnet| 一本久久精品一区二区| 日韩亚洲欧美成人一区| 国产色综合一区| 亚洲欧美日韩一区二区 | 国产精品1024久久| 色综合一个色综合亚洲| 91精品国产麻豆| 日本一区二区三区免费乱视频| 亚洲免费电影在线| 久久99在线观看| 白白色 亚洲乱淫| 91麻豆精品国产自产在线| 国产丝袜美腿一区二区三区| 一区二区成人在线视频| 国内精品久久久久影院一蜜桃| 99视频精品全部免费在线| 在线不卡中文字幕播放| 国产欧美日韩精品一区| 丝袜亚洲精品中文字幕一区| 波多野结衣中文一区| 欧美日韩免费视频| 国产福利一区在线观看| 欧美巨大另类极品videosbest| 亚洲少妇最新在线视频| 久久久91精品国产一区二区三区| 国产精品高潮久久久久无| 久久精品国内一区二区三区| 一本大道综合伊人精品热热| 国产三级精品三级| 婷婷中文字幕一区三区| 99视频热这里只有精品免费| 欧美高清一级片在线| 久久久影视传媒| 国产大陆亚洲精品国产| 国产精品久久久久久久午夜片| 欧美日韩www| 日韩三级伦理片妻子的秘密按摩| 亚洲精品国产精品乱码不99| 国产老女人精品毛片久久| 欧美人xxxx| 亚洲国产日产av| 一本到高清视频免费精品| 国产欧美精品在线观看| 激情图区综合网| 精品日韩欧美一区二区| 日本不卡一区二区三区| 欧美日韩一区二区三区在线看 | 91香蕉国产在线观看软件| 久久久久久久网| 精品在线播放免费| 日韩欧美中文字幕精品| 欧美aaaaaa午夜精品| 91精选在线观看| 日韩成人一级片| 欧美日韩高清在线| 五月婷婷综合网| 91精品综合久久久久久| 日产欧产美韩系列久久99| 日韩一级黄色大片| 免费欧美日韩国产三级电影|