python自动化之路 day5-1 paramiko模块

模块 paramiko

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

1、下载安装

windows和Linux平台都建议使用pip 安装,
pip3 install paramiko

2、pycharm第三方库安装

来介绍一下PyCharm 安装使用第三方库的安装,因为是第一次安装第三方库,仪式感很重要。
打开pycharm,在File->Settings->Project: ->Project Interpreter 里,点右边的+号。

 

在搜索框输出入第三方库名,选中后点左下角的“Install Package”进行安装。

3、paramiko模块使用

远程执行命令:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy)
ssh.connect('192.168.0.172',22,'Ljohn','1356236')
stdin,stdout,stderr = ssh.exec_command('uptime')
print(stdout.read())
ssh.close()

从上面可以看到输出的结果是byte字节类型需要转换,完善一下上面代码:

import paramiko
# 创建SSH对象
ssh = paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
# 连接服务器,下面改一下登陆信息
ssh.connect(hostname='192.168.0.172',port=22,username='Ljohn',password='1356236')
# 执行命令,写死命令或者用下面的获取输入
stdin,stdout,stderr = ssh.exec_command('ls -la /etc/paswd')
# 获取命令结果,标准输出和标准错误应该同事只有一个值
res,err = stdout.read(),stderr.read()
if res: print('res:\n',res.decode())
if err: print('err:\n',err.decode())
# 关闭连接
ssh.close()

参数说明:上面例子中的第二句 ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy()) ,设置允许没有host_key的连接策略。如果找不到know_hosts文件,或者文件中没有这台主机,如果没有这句,就会报错。如果有这句,那么就执行作为参数的那个方法的策略。作为参数的 paramiko.MissingHostKeyPolicy() 还有另外3个方法。

  • MissingHostKeyPolicy: 这个是下面3个参数的父类,直接就一句pass,就是什么也不做。所以可以正常运行
  • AutoAddPolicy: 自动添加到know_hosts中,那么下次就不会找不到了。如果找不到know_host文件的话,就和上面一样了
  • RejectPolicy: 直接拒绝,会抛出一个错误。默认就是这个,所以不写这句会报错。
  • WarningPolicy: 发出警告,会先报个错,但是不中断,程序还会继续执行

SFTP远程上传下载文件:

import paramiko
transport = paramiko.Transport(('192.168.1.123', 22))
transport.connect(username='Ljohn', password='123456')
# 建立sftp连接
sftp = paramiko.SFTPClient.from_transport(transport)
# 上传文件:源文件,目的文件
sftp.put('local.txt', '/tmp/server.txt')
# 下载文件:源文件,目的文件
sftp.get('/tmp/server.txt', 'from_server.txt')
transport.close()
sftp上传下载-用户密码
基于密钥验证

在paramiko模块里也是以后,使用pkey来代替passwod进行登录

远程执行命令:

import paramiko
# 使用命令从文件获取密钥,注意修改文件路径
private_key = paramiko.RSAKey.from_private_key_file('id_rsa')
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.MissingHostKeyPolicy())
# 连接服务器,这里要改一下,注意参数
ssh.connect(hostname='192.168.0.172', port=22, username='Ljohn', pkey=private_key)
# 执行命令测试一下
stdin, stdout, stderr = ssh.exec_command('df')
res, err = stdout.read(), stderr.read()
if res: print('res:\n', res.decode()) # 如果有标准输出,则打印出来
if err: print('err:\n', err.decode()) # 如果有标准错误,则打印出来
ssh.close()
远程执行命令-密钥验证

sftp 上传下载文件:

import paramiko
pravie_key_path = '/home/Ljohn/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
t = paramiko.Transport(('192.168.0.172',22))
t.connect(username='Ljohn',pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('/tmp/test3.py','/tmp/test3.py') 
sftp.get('/tmp/test3.py','/tmp/test4.py') 
t.close()
sftp上传下载-密码验证
posted on 2018-02-07 17:58 ljohnmail 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/ljohn-/p/8427831.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值