paramiko简介:

模拟ssh客户端,使用ssh协议,基于sftp协议等做批量管理。例如处理用ssh登陆一千台机器执行
同一个命令,或下载上传文件等需求

基于用户名密码登录执行命令:

import paramiko

#创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts文件中的主机,自动添加konw_host里面没有的主机
ssh.set_missing_hsot_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname='c1.salt.com',port=22,username='root',password='centos')
#执行命令,标准输入,输出,错误,其中输出和错误只有一个有结果
stdin,stdout,stderr = ssh.exec_command('df')
#获取标准输出的结果
result = stdout.read()
print(result.decode())
#关闭连接
ssh.close()

基于用户名密码登录上传下载文件:

import paramiko
'''
模拟SCP命令传文件
''' transport = paramiko.Transport(("hostname",22))
transport.connect(username='root', password='')
#把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()

上面的方式,用户名,密码写在列表里,循环连接这样是明文不安全 还有一种方式是用秘钥连接更安全

基于RSA公钥私钥连接执行命令:

import paramiko

private_key = paramiko.RSAKey.from_private_key_file('/home/auto/.ssh/id_rsa')
#创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_host文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname='c1.salt.com',port=22,username='root',pkey=private_key)
#执行命令
stdin, stdout, stderr = ssh.exec_command('df')
result = stdout.read()
print(result.decode())

基于RSA公钥私钥连接上传下载文件:

import paramiko

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

transport = paramiko.Transport(('hostname',22))
transport.connect(username='root',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()

注意事项:

错误说明:
not found konw_host文件
如果没有写这句话会报上面的错:ssh.set_missing_hsot_key_policy(paramiko.AutoAddPolicy())
在Linux里,用户家目录里有ls .ssh/know_host 10.0.0.31-->10.0.0.41
私钥 公钥
想连别的机器不用密码,就把公钥给别人放别人的家目录,私钥自己拿着
私钥和公钥成对出现,类似于对暗号的形式
												

最新文章

  1. 20141203图片Base64编码与解码
  2. iOS NSDate与NSString相互转化
  3. javascript位置相关知识点整理
  4. php JS和JQ
  5. HTML5上传图片预览
  6. Hibernate中openSession() 与 getCurrentSession()的区别
  7. 1414. Astronomical Database(STL)
  8. 通过正则表达式获取url中参数
  9. Android SharedPreference 数据存储
  10. MFC内部结构剖析
  11. MVC下判断用户登录和授权状态方法
  12. THE MATRIX PROBLEM
  13. git日常使用经验积累
  14. ResizeObserver - 元素resize监听API
  15. PostgreSQL对汉字按拼音排序
  16. SlidingMenu第一篇 --- 导入SlidingMenu库
  17. Git bash 配置多个远端仓库
  18. getattribute
  19. vue2.0路由-路由嵌套
  20. php文件每隔几秒执行一次

热门文章

  1. 并发编程(十二)—— Java 线程池 实现原理与源码深度解析 之 submit 方法 (二)
  2. Python爬虫入门教程 7-100 蜂鸟网图片爬取之二
  3. C++中int与string的转化
  4. 为了学好Java,我尝试了这 6 个方法
  5. centos7修改网卡名字为传统名字
  6. 解决虚拟机连接不上外网,不能互相ping通
  7. Java开发笔记(五十五)关键字static的用法
  8. JS截取数字
  9. PHP 中的Trait
  10. node处理表单文件,获取formdata的数据