paramiko模块

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
')
stdin.flush()
stdin.write('123
')
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()
原文地址:https://www.cnblogs.com/freely/p/6407549.html