• 利用python中paramiko实现远程服务器文件的上传下载
  • 发布于 1个月前
  • 42 热度
    1 评论
  • Anna
  • 3 粉丝 35 篇博客
  •   
在python的世界里,你可以使用原始套接字和一些加密函数创建自己的SSH客户端或服务端,但如果有现成的模块,为什么还要自己实现呢。使用Paramiko库中的PyCrypto能够让你轻松使用SSH2协议。

paramiko 遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接,可以实现远程文件的上传,下载或通过ssh远程执行命令。

项目地址:https://github.com/paramiko/paramiko
官方文档:http://docs.paramiko.org/

1.安装:

paramiko# pip install paramiko


2. 上传文件到远程服务器
原理:通过SFTPClient类根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作。实现远程文件上传、下载。
任务:10. 1.101.187向10.1.101.186发送文件。

10.1.101.187 目录/root/paramiko 有三个文件 paramikosend.py test test.tar
10.1.101.186 目录/root/paramiko 开始为空文件夹
root@ubuntu:~/paramiko# cat paramikosend.py 

import paramiko,datetime,os
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
local_dir = '/root/paramiko'
remote_dir = '/root/paramiko'

try:
        t=paramiko.Transport((hostname,port))
        t.connect(username=username,password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        files = os.listdir(local_dir)        
        for f in files:
                sftp.put(os.path.join(local_dir,f),os.path.join(remote_dir,f))
        t.close()
except Exception:        
       print ("connect error!")
3. 从远程服务器下载文件
原理:通过SFTPClient类根据SSH传输协议的sftp会话,实现远程文件上传、下载等操作。实现远程文件上传、下载。
任务:现在10.1.101.186的/root/paramiko/temp186目录有两个文件,将其下载到10.1.101.187的/root/paramiko/temp187目
root@ubuntu:~/paramiko# cat paramikoget.py 
import paramiko,datetime,os
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
local_dir = '/root/paramiko/temp187'
remote_dir = '/root/paramiko/temp186'

try:
        t=paramiko.Transport((hostname,port))
        t.connect(username=username,password=password)
        sftp = paramiko.SFTPClient.from_transport(t)
        files = sftp.listdir(remote_dir) #这里需要注意,列出远程文件必须使用sftp,而不能用os
        for f in files:
                sftp.get(os.path.join(remote_dir,f),os.path.join(local_dir,f))
        t.close()
except Exception:        
    print ("connect error!")
当然,我们还可以执行以下操作:

 #创建目录    
sftp.mkdir("/home/userdir", 0755)   
 #删除目录    
sftp.rmdir("/home/userdir")    
 #文件重命名    
sftp.rename("/home/test.sh", "/home/testfile.sh")    
 #打印文件信息    
print sftp.stat("/home/testfile.sh")    
 #打印目录列表    

print sftp.listdir("/home")  


4. 执行命令测试
原理:通过SSHClient类执行命令。SSHClient类是SSH服务会话的高级表示,封装了传输、通道以及SFTPClient的校验、建立方法,通常用于执行命令。
任务:通过10.1.101.187连接到10.1.101.186,然后进入目录/root/paramiko,创建一个目录lxy
root@ubuntu:~/paramiko# cat paramikocommand.py 
#!/usr/bin/python
import paramiko
hostname = '10.1.101.186'
username = 'root'
password = '123456'
port = 22
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,port=port,username=username,password=password)
stdin, stdout, stderr = ssh.exec_command("cd  /root/paramiko;mkdir lxy")
print stdout.readlines()
ssh.close()

用户评论