电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

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

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

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

paramiko

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

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

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

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

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

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

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

SSHClient 的使用

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

connect:實(shí)現(xiàn)遠(yuǎn)程服務(wù)器的連接與認(rèn)證

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:連接的目的主機(jī), 這個(gè)參數(shù)是必須的 port=SSH_PORT:指定的端口, 默認(rèn)是 22 username=None:登陸的用戶 password=None:用戶密碼 pkey=None:通過私鑰進(jìn)行身份驗(yàn)證 key_filename=None:一個(gè)文件名或文件列表, 指定私鑰文件 timeout=None:可選的 tcp 連接超時(shí)時(shí)間 allow_agent=True:是否允許連接到 ssh 代理, 默認(rèn)為 True look_for_keys=True:是否在 ~/.ssh 中搜索私鑰文件, 默認(rèn)為 True, 表示允許 compress=False:是否打開壓縮 set_missing_host_key_policy:當(dāng)遠(yuǎn)程服務(wù)器沒有本地秘鑰或 HostKeys 對(duì)象時(shí)的應(yīng)對(duì)策略,目前支持三種: AutoAddPolicy:自動(dòng)添加主機(jī)名以及主機(jī)秘鑰到本地 HostKeys 對(duì)象, 不依賴 load_system_host_key 的配置, 即新建立 ssh 連接時(shí)不需要再輸入 yes 或 no 進(jìn)行確認(rèn) WarningPolicy:用于記錄一個(gè)未知的主機(jī)秘鑰的 Python 警告、并且接收; 所以它的功能和 AutoAddPolicy 是類似的, 只不過會(huì)提示這是新連接 RejectPolicy:自動(dòng)拒絕未知的主機(jī)名和秘鑰, 依賴 load_system_host_key 的配置, 該選項(xiàng)為默認(rèn)選項(xiàng)

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

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

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

下面我們來演示一下:

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

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

import paramiko# 創(chuàng)建一個(gè) Transport 對(duì)象, 使用時(shí)會(huì)同步創(chuàng)建一個(gè) paramiko.Channel 對(duì)象# 參數(shù)傳遞一個(gè)由 IP 和 PORT 組成的元組即可transport = paramiko.Transport(('47.94.174.89', 22))# 連接 ssh, 通過 username 和 passwordtransport.connect(username='root', password='xxxxxxx')# 獲取 SFTPClient 實(shí)例, 它便相當(dāng)于 Linux 下的 sftp, 我們通過它可以進(jìn)行文件的一些操作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)限, 默認(rèn)為 511(o777 是一個(gè)變量, 等于 511) rmdir(self, path):刪除服務(wù)器上的目錄 remove(self, path):刪除服務(wù)器上的文件 rename(self, oldpath, newpath):對(duì)服務(wù)器上目錄進(jìn)行重命名 stat(self, path):查看文件或目錄的狀態(tài) listdir(self, path=’.’):列出服務(wù)器目錄下的文件 getcwd(self):查看工作區(qū), 也就是當(dāng)前所在路徑 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/binsftp.chdir('/root')print(sftp.getcwd()) # /root'''如果不調(diào)用 sftp.chdir(path) 的時(shí)候, 那么打印 sftp.getcwd() 時(shí)結(jié)果為 None但我們知道登陸 Linux 時(shí), 默認(rèn)會(huì)在 /root 目錄(對(duì)于 root 用戶而言)對(duì)于當(dāng)前的 sftp 而言也確實(shí)如此, 只不過打印 sftp.getcwd() 的時(shí)候結(jié)果為 None 罷了 '''# 3. 列出當(dāng)前目錄下的文件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')) # 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')# 最后關(guān)閉 sftp 和 transportsftp.close()transport.close()

當(dāng)然我們?cè)诮榻B SSHClient 的時(shí)候說過,還可以通過 open_sftp 的方式來創(chuàng)建 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’)# 這種方式創(chuàng)建也是可以的sftp = client.open_sftp()

以上就是python基于paramiko庫遠(yuǎn)程執(zhí)行 SSH 命令,實(shí)現(xiàn) sftp 下載文件的詳細(xì)內(nèi)容,更多關(guān)于python paramiko庫的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
主站蜘蛛池模板: 风化石头制砂机_方解石制砂机_瓷砖石子制砂机_华盛铭厂家 | 坏男孩影院-提供最新电影_动漫_综艺_电视剧_迅雷免费电影最新观看 | uv固化机-丝印uv机-工业烤箱-五金蚀刻机-分拣输送机 - 保定市丰辉机械设备制造有限公司 | 体坛网_体坛+_体坛周报新闻客户端| AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 锯边机,自动锯边机,双面涂胶机-建业顺达机械有限公司 | 全自动五线打端沾锡机,全自动裁线剥皮双头沾锡机,全自动尼龙扎带机-东莞市海文能机械设备有限公司 | 多米诺-多米诺世界纪录团队-多米诺世界-多米诺团队培训-多米诺公关活动-多米诺创意广告-多米诺大型表演-多米诺专业赛事 | 沈飞防静电地板__机房地板-深圳市沈飞防静电设备有限公司 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 踏板力计,制动仪,非接触多功能速度仪,逆反射系数测试仪-创宇 | 除甲醛公司-甲醛检测-广西雅居环境科技有限公司| 一体化隔油提升设备-餐饮油水分离器-餐厨垃圾处理设备-隔油池-盐城金球环保产业发展有限公司 | 空冷器|空气冷却器|空水冷却器-无锡赛迪森机械有限公司[官网] | 智能监控-安防监控-监控系统安装-弱电工程公司_成都万全电子 | 企业微信营销_企业微信服务商_私域流量运营_艾客SCRM官网 | 塑料薄膜_PP薄膜_聚乙烯薄膜-常州市鑫美新材料包装厂 | 杭州营业执照代办-公司变更价格-许可证办理流程_杭州福道财务管理咨询有限公司 | 定时排水阀/排气阀-仪表三通旋塞阀-直角式脉冲电磁阀-永嘉良科阀门有限公司 | 加气混凝土砌块设备,轻质砖设备,蒸养砖设备,新型墙体设备-河南省杜甫机械制造有限公司 | AGV无人叉车_激光叉车AGV_仓储AGV小车_AGV无人搬运车-南昌IKV机器人有限公司[官网] | 青州搬家公司电话_青州搬家公司哪家好「鸿喜」青州搬家 | 焊缝跟踪系统_激光位移传感器_激光焊缝跟踪传感器-创想智控 | 上海璟文空运首页_一级航空货运代理公司_机场快递当日达 | 防水接头-电缆防水接头-金属-电缆密封接头-不锈钢电缆接头 | 耐火砖厂家,异形耐火砖-山东瑞耐耐火材料厂 | 锂电叉车,电动叉车_厂家-山东博峻智能科技有限公司 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 沈阳楼承板_彩钢板_压型钢板厂家-辽宁中盛绿建钢品股份有限公司 轴承振动测量仪电箱-轴承测振动仪器-测试仪厂家-杭州居易电气 | 华禹护栏|锌钢护栏_阳台护栏_护栏厂家-华禹专注阳台护栏、楼梯栏杆、百叶窗、空调架、基坑护栏、道路护栏等锌钢护栏产品的生产销售。 | 冷藏车厂家|冷藏车价格|小型冷藏车|散装饲料车厂家|程力专用汽车股份有限公司销售十二分公司 | 天津试验仪器-电液伺服万能材料试验机,恒温恒湿标准养护箱,水泥恒应力压力试验机-天津鑫高伟业科技有限公司 | 泰来华顿液氮罐,美国MVE液氮罐,自增压液氮罐,定制液氮生物容器,进口杜瓦瓶-上海京灿精密机械有限公司 | 环压强度试验机-拉链拉力试验机-上海倾技仪器仪表科技有限公司 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 建筑消防设施检测系统检测箱-电梯**检测仪器箱-北京宇成伟业科技有限责任公司 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 搜木网 - 木业全产业链交易平台,免费搜货、低价买货! | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 低粘度纤维素|混凝土灌浆料|有机硅憎水粉|聚羧酸减水剂-南京斯泰宝 |