paramiko模块
下载安装
# pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto # 下载安装 pycrypto wget http://files.cnblogs.com/files/wupeiqi/pycrypto-2.6.1.tar.gz tar -xvf pycrypto-2.6.1.tar.gz cd pycrypto-2.6.1 python setup.py build python setup.py install # 进入python环境,导入Crypto检查是否安装成功 # 下载安装 paramiko wget http://files.cnblogs.com/files/wupeiqi/paramiko-1.10.1.tar.gz tar -xvf paramiko-1.10.1.tar.gz cd paramiko-1.10.1 python setup.py build python setup.py install # 进入python环境,导入paramiko检查是否安装成功
使用模块
1. 基于用户名和密码的 sshclient 方式登录
import paramiko # 建立一个sshclient对象 ssh = paramiko.SSHClient() # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 调用connect方法连接服务器 ssh.connect(hostname=‘172.16.209.19‘,port=22,username=‘root‘,password=‘123‘) # 执行命令 stdin, stdout, stderr = ssh.exec_command(‘df -hl‘) # 结果放到stdout中,如果有错误将放到stderr中 print(stdout.read().decode()) # 关闭连接 ssh.close()
注意:以sshclient方式运行交互式命令需要增加两行
import paramiko # 建立一个sshclient对象 ssh = paramiko.SSHClient() # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 调用connect方法连接服务器 ssh.connect(hostname=‘172.16.209.119‘,port=22,username=‘root‘,password=‘123‘) # 执行命令 stdin, stdout, stderr = ssh.exec_command("passwd lhf") # 结果放到stdout中,如果有错误将放到stderr中 stdin.write(‘123\n‘) stdin.flush() stdin.write(‘123\n‘) stdin.flush() print(stderr.read()) # 关闭连接 ssh.close()
2 基于用户名和密码的 transport 方式登录
其实paramiko.SSHClient().connect()这个方法的内部实现调用的就是Transport().connect()这个方法。所以可以认为Transport()是paramiko里面创建连接的通用方法。
import paramiko # 实例化一个transport对象 trans = paramiko.Transport((‘172.16.209.119‘, 22)) # 建立连接 trans.connect(username=‘root‘, password=‘123‘) # 将sshclient的对象的transport指定为以上的trans ssh = paramiko.SSHClient() ssh._transport = trans # 执行命令,和传统方法一样 stdin, stdout, stderr = ssh.exec_command(‘df -hl‘) print(stdout.read().decode()) # 关闭连接 trans.close()
3.基于公钥密钥的 SSHClient 方式登录
import paramiko # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数 pkey = paramiko.RSAKey.from_private_key_file(‘D:\id_rsa‘,password=‘123456‘) # 建立连接 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname=‘172.16.209.119‘, port=22, username=‘root‘, pkey=pkey) # 执行命令 stdin, stdout, stderr = ssh.exec_command(‘df -hl‘) # 结果放到stdout中,如果有错误将放到stderr中 print(stdout.read().decode()) # 关闭连接 ssh.close()
4 .基于密钥的 Transport 方式登录
import paramiko # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数 pkey = paramiko.RSAKey.from_private_key_file(‘D:\id_rsa‘, password=‘123456‘) # 建立连接 trans = paramiko.Transport((‘172.16.209.119‘, 22)) trans.connect(username=‘root‘, pkey=pkey) # 将sshclient的对象的transport指定为以上的trans ssh = paramiko.SSHClient() ssh._transport = trans # 执行命令,和传统方法一样 stdin, stdout, stderr = ssh.exec_command(‘df -hl‘) print(stdout.read().decode()) # 关闭连接 trans.close()
传文件 SFTP
import paramiko # 实例化一个trans对象# 实例化一个transport对象 trans = paramiko.Transport((‘172.16.209.119‘, 22)) # 建立连接 trans.connect(username=‘root‘, password=‘123‘) # 实例化一个 sftp对象,指定连接的通道 sftp = paramiko.SFTPClient.from_transport(trans) # 发送文件 sftp.put(localpath=‘D:\id_rsa‘, remotepath=‘/tmp/id_rsa‘) # 下载文件 # sftp.get(remotepath, localpath) trans.close()
时间: 2024-11-02 23:35:11