paramiko模块

该模块基于ssh,用于连接远程服务器并执行相关操作

 

1,sshCLIENT,基于用户名和密码连接

1.1

import paramiko
# 该模块基于ssh,用于连接远程服务器并执行相关操作

ssh = paramiko.SSHClient()
# 创建ssh对象
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 允许ssh连接不在known_hosts文件中的主机
ssh.connect(hostname="10.1.1.99", port=22, username="root", password="123456")
# 连接服务器

stdin, stdout, stderr = ssh.exec_command("df -hT")
# 执行命令

result = stdout.read() # 获取结果
print(result.decode())
ssh.close()  # 关闭连接

  1.2,sshclient封装transport

import paramiko

transport = paramiko.Transport(('10.1.1.99', 22))
transport.connect(username='root', password='123456')
ssh = paramiko.SSHClient()
ssh._transport = transport
stdin, stdout, stderr = ssh.exec_command("ip ro sh")
# 执行命令
result = stdout.read() # 获取结果
print(result.decode())
ssh.close()  # 关闭连接
View Code

 

2, SFTPclient用于连接远程服务器,执行上传下载

import paramiko

transport = paramiko.Transport(('10.1.1.99', 22))
transport.connect(username='root', password='123456')

sftp = paramiko.SFTPClient.from_transport(transport)

sftp.put('paramiko-test.txt', '/root/yn/f1')
# 上传本地文件到远程服务器
sftp.get('/root/yn/f1', 'paramiko-test.txt')
# 把远程服务器的文件下载到本地
sftp.close()

# 注意不论是上传还是下载,目标location不能为目录,必须是文件。不然没法写入,会报错!

 

上述不论是登录执行命令还是上传和下载也好,密码都要明文输入,这样就带来了安全隐患。

 

3, 基于公钥密钥的连接

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('id_rsa')

# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.1.1.200', port=22, username='yn', pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command('free -m')
# 获取命令结果

result = stdout.read()
print(result.decode())
# 关闭连接
ssh.close()

 

注意思路:这里是把linux主机上的私钥拷贝过来的,也就相当于把window的公钥发给了linux,然后去连接,linux,(当然windows也可以利用Xshell来产生公钥进行连接linux)这里尤其要注意的点是在linux的主机上,一定不要忘了把自己的公钥拷贝到authorized_keys这个验证文件里面,否则会报错!这是浪费了一个下午的时间和精力得来的经验!!!

 

4, 基于公钥进行上传和下载

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
transport = paramiko.Transport(('10.1.1.200', 22))
transport.connect(username='yn', pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

# sftp.put("paramiko-test.txt", "/home/yn/recv.txt")  # 上传文件
sftp.get("/home/yn/recv.txt", "paramiko.txt")  # 下载文件

transport.close()

  注意:不管是上传还是下载目标文件必须要写。

 

posted @ 2017-02-21 20:01  早晨我在雨中采花  阅读(131)  评论(0编辑  收藏  举报