1. 介绍:

paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来实现。
安装: python3.6 -m pip install paramiko

2. 使用:

SSHClient

用于连接远程服务器并执行基本命令

基于用户名密码连接:

#!/usr/bin/env python3
# _*_ coding:utf- _*_
import paramiko
ip,port = '10.0.3.60',''
username,password = 'lishichao',' # 创建ssh对象
ssh = paramiko.SSHClient()
# 解决ssh第一次连接,认证问题
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(ip,port,username,password) # 执行命令
stdin,stdout,stderr = ssh.exec_command('hostname') # stdin 标准输入, stdout 命令执行的结果, stderr 命令执行错误的结果
# 获取命令结果
ret = stdout.read()
if ret:
print(ret.decode('utf-8').strip())
else:
print("命令执行失败")
print(stderr.read().decode('utf-8').strip()) # 关闭连接
ssh.close() # 执行结果:
b'docker-server\n' # byte 类型,需要decode转码

基于公钥密钥连接:

#创建秘钥对
ssh-keygen
# 推送到指定服务器
ssh-copy-id -i .ssh/id_rsa.pub 用户名字@192.168.x.xxx

前提: 分配公钥

import paramiko

# 秘钥文件
private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') # 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname='10.0.3.56', port=, username='root', pkey=private_key) # 执行命令
stdin, stdout, stderr = ssh.exec_command('df')
# 获取命令结果
result = stdout.read()
print(result.decode('utf-8'))
# 关闭连接
ssh.close()

出现警告:CryptographyDeprecationWarning

/usr/local/lib/python3./site-packages/paramiko/kex_ecdh_nist.py:: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
m.add_string(self.Q_C.public_numbers().encode_point())
/usr/local/lib/python3./site-packages/paramiko/kex_ecdh_nist.py:: CryptographyDeprecationWarning: Support for unsafe construction of public numbers from encoded data will be removed in a future version. Please use EllipticCurvePublicKey.from_encoded_point
self.curve, Q_S_bytes
/usr/local/lib/python3./site-packages/paramiko/kex_ecdh_nist.py:: CryptographyDeprecationWarning: encode_point has been deprecated on EllipticCurvePublicNumbers and will be removed in a future version. Please use EllipticCurvePublicKey.public_bytes to obtain both compressed and uncompressed point encoding.
hm.add_string(self.Q_C.public_numbers().encode_point())

警告信息

原因:
paramiko 2.4. 依赖 cryptography,而最新的cryptography==.5里有一些弃用的API。 解决:
删掉cryptography 2.5,安装2.4.2,就不会报错了。
python3 -m pip uninstall cryptography==2.5
python3 -m pip install cryptography==2.4.

解决方法:

 

SFTPClient

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

基于用户名密码上传下载

import paramiko

transport = paramiko.Transport(('10.0.3.56',))
transport.connect(username='root', password='buguniao123!@#') sftp = paramiko.SFTPClient.from_transport(transport) # 将/tmp/test.txt 上传至服务器 /data/test.txt
sftp.put('/tmp/test.txt', '/data/test.txt') # 将/data/test.txt 下载到本地 /tmp/a.txt
sftp.get('/data/test.txt', '/tmp/a.txt') transport.close()

基于公钥密钥上传下载

import paramiko

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

transport = paramiko.Transport(('10.0.3.56', ))
transport.connect(username='root', pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport) # 将/tmp/haha.txt 上传至服务器 /tmp/a.txt
sftp.put('/tmp/haha.txt', '/tmp/a.txt') # 将/tmp/a.txt 下载到本地 /root/a.txt
sftp.get('/tmp/a.txt', '/root/a.txt') transport.close()

最新文章

  1. asp.net使用Get请求webservice
  2. NSTimer “定时器”
  3. 基于MDK-ARM创建STM32L-DISCOVERY Project
  4. 每天一个linux命令--su
  5. GET到新技能,SharpCEF,C#和JS的互相调用
  6. java中String byte HexString的转换
  7. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
  8. JSON 之 SuperObject(4): 增、删、改
  9. maven 把spring项目打包成可执行的文件
  10. javascript中false值及其常见比较运算
  11. Form表单中的三种查询方法
  12. tcl/tk实例详解——返回一个文件夹下所有文件的绝对路径
  13. Delphi 6 Web Services初步评估之二(转)
  14. MySQL(4)---慢查询
  15. 今天终于想明白为什么java包要倒着写
  16. (zhuan) awesome-object-proposals
  17. vs2013 跳过IE10
  18. JAVA 类和对象基础知识详解
  19. mysql正则表达式,实现多个字段匹配多个like模糊查询
  20. [asp.net入门]利用ADO.NET处理数据的简单之处

热门文章

  1. 写在程序猿的困惑(特别Java程序猿)入行一年,感觉我不知道接下来该怎么办才能不断进步的,寻求翼
  2. JQuery采纳CSS实现DOM显示和隐藏要素
  3. 构建自己的PHP框架(ORM)
  4. 在微信浏览器里使用js或jquery实现页面重新刷新
  5. ntp时间同步,各种配置方法
  6. WPF后台生成datatemplate(TreeViewItem例子)
  7. 【Linux】scp“免密” 远程copy较多文件
  8. 数据库的事务日志已满,起因为"LOG_BACKUP"。
  9. WPF 中RichTextBox控件用法细讲
  10. mysql5.7.18 初始化和运行