日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

python paramiko使用_使用python的paramiko模块实现ssh与scp功能

發(fā)布時(shí)間:2025/4/5 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python paramiko使用_使用python的paramiko模块实现ssh与scp功能 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

#1. 介紹

這篇文章簡單地介紹了python的paramiko模塊的用法,paramiko實(shí)現(xiàn)了SSH協(xié)議,能夠方便地與遠(yuǎn)程計(jì)算機(jī)交互。簡單的說,就是你在terminal下執(zhí)行的如下語句,現(xiàn)在可以通過python的paramiko實(shí)現(xiàn)了。

# 執(zhí)行shell語句

ssh -i ~/.ssh/id_rsa -p 1098 rds@12.164.145.21 -e 'ls -al'

# 拷貝數(shù)據(jù)到遠(yuǎn)程計(jì)算機(jī)

scp -i ~/.ssh/id_rsa -P 1098 -r data rds@12.164.145.21:~/data

這里不討論shell與python實(shí)現(xiàn)的優(yōu)缺點(diǎn),如果你沒有需求,也不會(huì)看到這篇博客了。我個(gè)人使用paramiko是為了使用python的多線程,并發(fā)地對多臺(tái)遠(yuǎn)程計(jì)算機(jī)執(zhí)行相同的操作。

這篇博客雖然篇幅不大,但是,可能是目前網(wǎng)絡(luò)上最好的中文入門教程了。那就開始吧!

2. 安裝

安裝非常簡單,直接使用pip安裝即可:

sudo pip instal paramiko

3. 建立SSH連接

使用密碼連接:

import paramiko

ssh = paramiko.SSHClient()

#這行代碼的作用是允許連接不在know_hosts文件中的主機(jī)。

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect("IP", port, "username", "password")

使用私鑰連接:

ssh = paramiko.SSHClient()

ssh.connect('10.120.48.109', port, '用戶名',

key_filename='私鑰')

連接以后可以執(zhí)行shell命令:

In [8]: ssh.exec_command('ls')

Out[8]:

(>>,

>>,

>>)

執(zhí)行shell命令以后,并不會(huì)立即打印命令的執(zhí)行結(jié)果,而是返回幾個(gè)Channel, 只能像下面這樣獲取輸出:

In [9]: stdin, stdout, stderr = ssh.exec_command('ls')

In [10]: print stdout.readlines()

['AgentBackkup_2015-06-11\n', 'AgentBackup\n', 'log\n', 'mysql.sh\n', 'rdsAgent\n']

注意: 命令執(zhí)行出錯(cuò)并不會(huì)拋出異常,所以,對于命令出錯(cuò)需要根據(jù)自己的需求進(jìn)行相應(yīng)的處理:

In [54]: stdin, stdout, stderr = ssh.exec_command('cat file_not_found')

In [55]: print stdout.readlines()

[]

In [56]: print stderr.readlines()

[u'cat: file_not_found: No such file or directory\n']

In [57]: stdin, stdout, stderr = ssh.exec_command('ls')

In [58]: print stderr.readlines()

[]

4. SCP vs SFTP

通過paramiko還可以傳輸文件,這是我寫這篇博客的主要原因。搜了很多博客,都沒有說明白如何通過paramiko在計(jì)算機(jī)之間傳輸文件,通過閱讀官方文檔,發(fā)現(xiàn)有如下兩種方式:

sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())

sftp = ssh.open_sftp()

即新建一個(gè)SFTPClient對象,該對象復(fù)用之前的SSH連接,因此,我們使用sftp傳輸文件時(shí),不需要再次進(jìn)行用戶認(rèn)證。

文件上傳

In [59]: sftp.put('memory.py', 'memory.py')

Out[59]:

文件下載

In [60]: sftp.get('memory.py', 'backup.py')

執(zhí)行命令

paramiko并沒有提供一個(gè)叫做scp的子模塊,如果我們希望在計(jì)算機(jī)之間傳輸數(shù)據(jù),可以通過sftp(sftp實(shí)現(xiàn)了scp所有的功能,也就沒有必再實(shí)現(xiàn)一個(gè)scp)傳輸文件,還可以通過sftp執(zhí)行命令,如下所示:

In [44]: sftp.listdir()

Out[44]:

['.viminfo',

'.bash_logout',

'.bash_history',

'AgentBackkup_2015-06-10',

'AgentBackup',

'rdsAgent']

In [45]: sftp.rename('AgentBackkup_2015-06-10', 'AgentBackkup_2015-06-11')

In [46]: sftp.listdir()

Out[46]:

['AgentBackkup_2015-06-11',

'.viminfo',

'.bash_logout',

'.bash_history',

'AgentBackup',

'rdsAgent']

sftp提供了很多命令,具體內(nèi)容可以參考官方文檔 。

總結(jié)

以上是生活随笔為你收集整理的python paramiko使用_使用python的paramiko模块实现ssh与scp功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。