python网络编程-paramiko模块

paramiko模块

  • 该模块基于SSH用于连接远程服务器并执行相关操作
    参考文档

SSHClient

  • 用于连接远程服务器并执行命令
import paramiko

#创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname='c1.salt.com',port=22,username='root',password='pwd')
#执行命令
stdin,stdout,stderr = ssh.exec_command('df')
#stdin返回输入的命令,stdout返回命令结果,stderr返回错误信息(stdout和stderr只会有一个有结果,错误时stderr有结果,正确是stdout有结果)
#获取命令结果
res,err = stdout.read(),stderr.read()
result = res if res else err
print(result.decode())

SFTPClient

  • 用于连接远程服务器并执行上传下载
import paramiko

transport = paramiko.Transport('hostname',22)
transport.connect(username='root',password='pwd')

sftp = paramiko.SFTPClient.form_transport(transport)
#讲localtion.py上传至服务器/tmp/test.py
sftp.put('/tmp/localtion.py','/tmp/test.py')
#将remove_path下载到本地local_path
sftp.get('remove_path','local_path')

transport.close()

SSH密钥

  • RSA 非对称密钥验证
  • 密钥分两部分
  • 公钥 pubilc key
  • 私钥 private key

生成公钥私钥

  • ssh -keygen
  • 默认存放在家目录下的.ssh/id_rsa
  • 其中/home/lmc/.ssh/id_ras是私钥,/home/lmc/.ssh/id_ras.pub是公钥

拷贝公钥给要登录的机器

  • ssh -copy-id "-p52113 root@10.0.0.31"

在SSH客户端上拷贝公钥并存储在windows

  • sz ~/.ssh/id_rsa

基于公钥的SSH

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

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

# 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()

# 关闭连接
ssh.close()

基于公钥密钥上传下载

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')

transport = paramiko.Transport(('hostname', 22))
transport.connect(username='wupeiqi', pkey=private_key )

sftp = paramiko.SFTPClient.from_transport(transport)
# 将location.py 上传至服务器 /tmp/test.py
sftp.put('/tmp/location.py', '/tmp/test.py')
# 将remove_path 下载到本地 local_path
sftp.get('remove_path', 'local_path')

transport.close()
posted @ 2017-09-05 09:46  coldcastle  阅读(280)  评论(0编辑  收藏  举报