paramiko是一个基于SSH用于链接远程服务器并执行相关操做(SSHClient和SFTPClinet,即一个是远程链接,一个是上传下载服务),使用该模块能够对远程服务器进行命令或文件操做,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。python
用于链接远程服务器并执行基本命令,server上要启动ssh程序bash
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/7/30 17:43 # @Author : zhouyuyao # @File : demon2.py import paramiko # 建立SSH对象 ssh = paramiko.SSHClient() # 容许链接不在~/.ssh/known_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 链接服务器 ssh.connect(hostname='xxx.xxx.xxx.xxx', port=22, username='username', password='password') # 执行命令,不要执行top之类的在不停的刷新的命令 stdin, stdout, stderr = ssh.exec_command('df -h') # 获取命令结果 result = stdout.read() # 获取的命令结果是bytes类型 print(result.decode(encoding="utf-8")) # 关闭链接 ssh.close()
运行以后得出执行命令的结果服务器
Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 27G 11G 71% / /dev/vdb1 99G 81G 14G 86% /mnt/vdbdata
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/7/30 17:50 # @Author : zhouyuyao # @File : demon3.py import paramiko transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22)) # 创建链接 transport.connect(username='username', password='password') # 创建链接 # 建立SSH对象 ssh = paramiko.SSHClient() # SSHClient是定义怎么传输命令、怎么交互文件 ssh._transport = transport # 执行命令,不要执行top之类的在不停的刷新的命令 stdin, stdout, stderr = ssh.exec_command('w') # 获取命令结果 result = stdout.read() # 获取的命令结果是bytes类型 print(result.decode(encoding="utf-8")) # 关闭链接 transport.close()
运行以后得出执行命令的结果ssh
08:47:47 up 220 days, 23:29, 1 user, load average: 0.05, 0.06, 0.09 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT loguser pts/1 xx.xx.xx.xx 08:47 31.00s 0.01s 0.01s -bash
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/7/30 17:56 # @Author : zhouyuyao # @File : demon4.py import paramiko # 指定使用ssh免密登入的私钥 private_key = paramiko.RSAKey.from_private_key_file('/home/username/.ssh/id_rsa') transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22)) transport.connect(username='username', pkey=private_key) ssh = paramiko.SSHClient() ssh._transport = transport stdin, stdout, stderr = ssh.exec_command('uptime') transport.close()
用于链接远程服务器并执行上传下载,server上要启动ssh程序spa
此处使用 SFTPClient 封装 Transport 的用法,仅适用于文件,不支持目录。线程
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2018/7/31 8:54 # @Author : zhouyuyao # @File : demon5.py import paramiko transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22)) # 创建链接 transport.connect(username='username', password='password') # 创建链接 # 建立sftp对象 sftp = paramiko.SFTPClient.from_transport(transport) # SFTPClient是定义怎么传输文件、怎么交互文件 # 将location.py 上传至服务器 /tmp/test.py sftp.put('E:/GitHub/Python-Learning/work/2018-07-27/auto_task.yml', '/tmp/auto_task.yml') # 将remove_path 下载到本地 local_path sftp.get('/root/nohup.out', 'E:/GitHub/Python-Learning/work/2018-07-27/nohup.out') # 关闭链接 transport.close()
#!/usr/bin/env python # -*- coding:utf-8 -*- import paramiko # 指定使用ssh免密登入的私钥 private_key = paramiko.RSAKey.from_private_key_file('/home/username/.ssh/id_rsa') transport = paramiko.Transport(('xxx.xxx.xxx.xxx', 22)) transport.connect(username='username', 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()
1. paramiko模块、进程、线程code