模块 paramiko
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。
1、下载安装
windows和Linux平台都建议使用pip 安装,
pip3 install paramiko2、pycharm第三方库安装
来介绍一下PyCharm 安装使用第三方库的安装,因为是第一次安装第三方库,仪式感很重要。
打开pycharm,在File->Settings->Project: ->Project Interpreter 里,点右边的+号。
在搜索框输出入第三方库名,选中后点左下角的“Install Package”进行安装。
3、paramiko模块使用
远程执行命令:
import paramikossh = 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 paramikotransport = 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()
基于密钥验证
在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 paramikopravie_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()
posted on 2018-02-07 17:58 阅读( ...) 评论( ...)