Python paramiko模块

  • 简介:
    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密
  和认证的方式,进行远程服务器的连接。由于使用的是python这样的能够跨
  平台运行的语言,所以所有python支持的平台,如Linux, Solaris, BSD, Mac
  OS X, Windows等,paramiko都可以支持,因此,如果需要使用SSH从一
  平台连接到另外一个平台,进行一系列的操作时,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='wupeiqi', password='123')
 
# 执行命令 , 加入;分好可执行两条命令(df;ifconfig)
stdin, stdout, stderr = ssh.exec_command('df')

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

# stdin 标准输入,返回输入的命令,你输入给它的。
# stdout 标准输出,命令执行结果
# stderr 标准错误,命令执行过程中如果出错,就打印。
# 注:命令只有一个,要么输出。要么错误。

# 注:可以使用三元运算,读取输出结果。
#    判断如果返回1就输出res,不成立就err。
#    res,err = stdout.read(),stderr.read()
#    result = res if res else err
#    print(result.decode())
#注:Linux ssh链接另一个节点。
#    Linux登陆:ssh root@x.x.x.x -p端口 
Linux ssh链接

 

  功能:paramiko ssh文件发送
# 基于用户名密码上传下载
# sshClient

import paramiko

# 发送文件时使用Transport(IP,端口),建立链接通道
transport = paramiko.Transport(('hostname',22))
transport.connect(username='wupeiqi',password='123')


# 将Transport作为链接,传给paramiko.SFTPClient.from_transport。
# 真正的传输协议实在SFTPClient内定义的。
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()
#注:Linux下使用ssh发送文件。
#    发送文件:scp -rp -P端口 文件名 root@x.x.x.x:路径
#    -rp,r代表目录,p代表权限。
Linux ssh文件发送

 

 

  • SSH RSA加密 :
  ssh 秘钥
  RSA 非对称秘钥验证
 
  公钥 public key
  私钥 private key
 
  10.0.0.31 --> 10.0.0.41 #不用密码链接
  私钥     公钥
 
  说明:先生成一对秘钥,秘钥在登陆端,公钥转给被登陆端,
     在次ssh时会匹配RSA秘钥则不需要输入密码。
 
 
 
  功能:paramiko 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()
#1.连接端生成秘钥
  #生成秘钥命令
  [root@localhost]# ssh-keygen 
  #秘钥存放路径
  Generating public/private rsa key pair.
  Enter file in which to save the key (/root/.ssh/id_rsa): 
  #秘钥上在加一条密令
  Enter passphrase (empty for no passphrase): 
  #在次输入上条密令
  Enter same passphrase again: 
  #RSA 2048 秘钥格式,生成随机图片
  +--[ RSA 2048]----+ 
 
#2.发送公钥
  #使用ssh-copy-id命令发送公钥,加对应端口与IP,注意的是需要加双引号。
  [root@localhost ~]# ssh-copy-id "-p22 root@192.168.1.158"
 
注:ssh公钥私钥说明。
  #私钥存放目录,不可传给任何人。
  Your identification has been saved in /root/.ssh/id_rsa.
  #公钥存放路径,传给要进行链接的节点。
  Your public key has been saved in /root/.ssh/id_rsa.pub.
  #将公钥存放对方用户目录下,没文件说明没登陆过,需手动创建。
  #权限设置为:chmod 600
  存方目录:用户]#vim .ssh/authorized_keys
  
#注:home/.ssh/known_hosts文件:首次登陆双方建立一个安全的签名认证,会
# 以加密的形式记录,再次登陆就不需要认证。
Linux SSH RSA加密
posted @ 2018-01-01 19:55  kevin.Xiang  阅读(668)  评论(0编辑  收藏  举报