python paramiko使用_使用python的paramiko模块实现ssh与scp功能
#1. 介紹
這篇文章簡單地介紹了python的paramiko模塊的用法,paramiko實現(xiàn)了SSH協(xié)議,能夠方便地與遠程計算機交互。簡單的說,就是你在terminal下執(zhí)行的如下語句,現(xiàn)在可以通過python的paramiko實現(xiàn)了。
# 執(zhí)行shell語句
ssh -i ~/.ssh/id_rsa -p 1098 rds@12.164.145.21 -e 'ls -al'
# 拷貝數(shù)據(jù)到遠程計算機
scp -i ~/.ssh/id_rsa -P 1098 -r data rds@12.164.145.21:~/data
這里不討論shell與python實現(xiàn)的優(yōu)缺點,如果你沒有需求,也不會看到這篇博客了。我個人使用paramiko是為了使用python的多線程,并發(fā)地對多臺遠程計算機執(zhí)行相同的操作。
這篇博客雖然篇幅不大,但是,可能是目前網(wǎng)絡上最好的中文入門教程了。那就開始吧!
2. 安裝
安裝非常簡單,直接使用pip安裝即可:
sudo pip instal paramiko
3. 建立SSH連接
使用密碼連接:
import paramiko
ssh = paramiko.SSHClient()
#這行代碼的作用是允許連接不在know_hosts文件中的主機。
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命令以后,并不會立即打印命令的執(zhí)行結(jié)果,而是返回幾個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í)行出錯并不會拋出異常,所以,對于命令出錯需要根據(jù)自己的需求進行相應的處理:
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在計算機之間傳輸文件,通過閱讀官方文檔,發(fā)現(xiàn)有如下兩種方式:
sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
sftp = ssh.open_sftp()
即新建一個SFTPClient對象,該對象復用之前的SSH連接,因此,我們使用sftp傳輸文件時,不需要再次進行用戶認證。
文件上傳
In [59]: sftp.put('memory.py', 'memory.py')
Out[59]:
文件下載
In [60]: sftp.get('memory.py', 'backup.py')
執(zhí)行命令
paramiko并沒有提供一個叫做scp的子模塊,如果我們希望在計算機之間傳輸數(shù)據(jù),可以通過sftp(sftp實現(xiàn)了scp所有的功能,也就沒有必再實現(xiàn)一個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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python长连接框架_python之w
- 下一篇: 工具类软件操作手册_全套广联达软件学习资