paramiko模块使用
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,fabric和ansible内部远程管理就是使用paramiko来实现。
#!/usr/bin/env python
# coding=utf- import paramiko ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='23.83.245.218', port=, username='root', password='xiaoming.note5') stdin, stdout, stderr = ssh.exec_command('free -m') result = stdout.read()
print(result.decode())
ssh.close()
执行命令--用户名密码
#!/usr/bin/env python
# coding=utf- import paramiko private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect(hostname='23.83.245.218', port=, username='root', pkey=private_key) stdin, stdout, stderr = ssh.exec_command('free -m')
result = stdout.read()
print(result.decode())
ssh.close()
执行命令--秘钥
#!/usr/bin/env python
# coding=utf- import paramiko transport = paramiko.Transport(('23.83.245.218', ))
transport.connect(username='root', password='xiaoming.note5') sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('/etc/passwd', '/tmp/115.159pwd')
sftp.get('/etc/passwd', '/tmp/23.83pwd') transport.close()
上传下载--用户名密码
#!/usr/bin/env python
# coding=utf- import paramiko private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa')
transport = paramiko.Transport(('23.83.245.218', ))
transport.connect(username='root',pkey=private_key) sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put('/etc/passwd', '/tmp/115.159pwd')
sftp.get('/etc/passwd', '/tmp/23.83pwd') transport.close()
上传下载--秘钥
一个简易执行命令,上传下载文件的小程序
#!/usr/bin/env python
# coding=utf- import sys
import re
import paramiko
import threading class Hostmanage(object): def __init__(self,cmdtype, user, host, cmd, port=):
self.host = host
self.username = user
self.port = int(port)
self.command = cmd
self.cmdtype = cmdtype
self.private_key = paramiko.RSAKey.from_private_key_file('/root/.ssh/id_rsa') def run(self):
if hasattr(self, cmdtype):
getattr(self, cmdtype)() def cmd(self):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=self.host, port=self.port, username=self.username, pkey=self.private_key)
stdin, stdout, stderr = ssh.exec_command(self.command)
ret, err = stdout.read(), stderr.read()
result = ret if ret else err
print(self.host)
print(result.decode())
ssh.close() def get(self):
try:
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, pkey=self.private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.get(self.command.split()[], self.command.split()[])
transport.close()
print('%s 下载 %s 成功' % (self.host, self.command.split()[]))
except:
print('%s 下载 %s 失败' % (self.host, self.command.split()[])) def put(self):
try:
transport = paramiko.Transport((self.host, self.port))
transport.connect(username=self.username, pkey=self.private_key)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.put(self.command.split()[], self.command.split()[])
transport.close()
print('%s 上传 %s 成功' % (self.host, self.command.split()[]))
except:
print('%s 上传 %s 失败' % (self.host, self.command.split()[])) def mythread(cmdtype, user, host, cmd, port=):
start = Hostmanage(cmdtype, user, host, cmd, port)
m = threading.Thread(target=start.run)
m.start() if __name__ == '__main__':
roledefs = {
'www': ['root@23.83.245.218:22', 'root@115.159.193.70:22',],
'game': ['root@23.83.245.218:22',]
} cmdtype = sys.argv[]
channel = sys.argv[]
cmd = sys.argv[] if cmdtype == 'cmd':
if channel in roledefs: # 有组名
for entry in roledefs[channel]:
user, host, port = re.split('@|:', entry)
mythread(cmdtype, user, host, cmd, port)
else:
if not re.search('(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}', channel):
print('错误的主机名')
else:
try:
user, host, port = re.split('@|:', channel)
mythread(cmdtype, user, host, cmd, port)
except ValueError as e:
user, host = re.split('@|:', channel)
mythread(cmdtype, user, host, cmd)
elif cmdtype == 'put':
if channel in roledefs: # 有组名
for entry in roledefs[channel]:
user, host, port = re.split('@|:', entry)
mythread(cmdtype, user, host, cmd, port)
else: # 无组名
# 不是IP地址
if not re.search('(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}', channel):
print('错误的主机名')
else:
try: # 有端口
user, host, port = re.split('@|:', channel)
mythread(cmdtype, user, host, cmd, port)
except ValueError as e: # 无端口
user, host = re.split('@|:', channel)
mythread(cmdtype, user, host, cmd)
elif cmdtype == 'get': # 只能获取单个主机的文件
if not re.search('(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}', channel):
print('错误的主机名')
else:
try:
user, host, port = re.split('@|:', channel)
mythread(cmdtype, user, host, cmd, port)
except ValueError as e:
user, host = re.split('@|:', channel)
mythread(cmdtype, user, host, cmd)
点我
### 作者信息
姓名:hexm
email:xiaoming.unix@gmail.com
### 实现功能
简版fabric实现
输入主机或者主机组
可以远程执行命令,上传下载单个文件。 ### 例子
上传/etc/passwd 文件到www主机组并保存为的/tmp/mypass
# python3 fab.py put www "/etc/passwd /tmp/mypass"
115.159.193.70 上传 /etc/passwd 成功
23.83.245.218 上传 /etc/passwd 成功 把/etc/passwd上传到23.83.245.218的/tmp目录下并改名mypass
# python3 fab.py put root@23.83.245.218 "/etc/passwd /tmp/mypass"
23.83.245.218 上传 /etc/passwd 成功 下载单个文件
# python3 fab.py get root@23.83.245.218 "/etc/passwd /tmp/mypass"
23.83.245.218 下载 /etc/passwd 成功
不能获取主机组的文件
# python3 fab.py get www "/etc/passwd /tmp/mypass"
错误的主机名 执行命令
# python3 fab.py cmd www "hostname"
115.159.193.70
VM_255_164_centos 23.83.245.218
localhost.localdomain
README
paramiko模块使用的更多相关文章
- paramiko模块的安装
1.找到自己python安装的目录(默认路径:C:\Users\zhangliyuan\AppData\Local\Programs\Python\Python35) 注:cmd中所有命令 2.进入S ...
- python远程连接paramiko 模块和堡垒机实现
paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...
- 利用paramiko模块实现堡垒机+审计功能
paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...
- 在Windows和Linux上安装paramiko模块以及easy_install的安装方法
一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...
- paramiko模块-2
如何用paramiko模块模拟登入服务器,并记录操作日志,起到审计的作用? 各个client ---(连接跳转机)--->(跳转机)------>各自的目标服务器. 目前我们公司的跳转机, ...
- paramiko模块
安装: # pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto (1) wget http://ftp.dlitz.net/pub/dlitz/cr ...
- Win7下Python2.7环境安装paramiko模块
Win7下Python2.7环境安装paramiko模块,经过安装并测试成功,整理文档如下: 1.下载安装Windows版本的Python2.7,我默认装在C:\Python27 我的python已经 ...
- Python Paramiko模块与MySQL数据库操作
Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...
- paramiko模块,线程,进程
关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...
- Python paramiko 模块
paramiko模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh ...
随机推荐
- 品牌OEM信息导入工具(实测支持Win10)
OEM修改,定制专属LOGO. 免费下载:http://yunpan.cn/cmZuTYWLIGX6Q 访问密码 2da7 备用通道: http://pan.baidu.com ...
- Java--笔记(5)
41.面向对象的五大基本原则 (1)单一职责原则(SRP) (2)开放封闭原则(OCP) (3)里氏替换原则(LSP) (4)依赖倒置原则(DIP) (5)接口隔离原则(ISP) 单一职责原则(SRP ...
- 修改placehosder
CSS美化INPUT placeholder效果.CSS代码美化文本框里的placeholder文字. ::selection伪元素 简而言之:单冒号(:)用于CSS3伪类,双冒号(::)用于CSS3 ...
- 显示当前用户所拥有的表&当前用户可以访问的所有表&数据库中的所有表&当前用户信息&当前用户所能管理的用户&数据库中所拥有的用户
1)显示当前用户名称:show user或者show user; 2)显示当前用户信息(包括用户名之外还有其他信息):select * from user_users; 3)显示数据库中所含有的所有用 ...
- Android 判断当前屏幕是横屏还是竖屏
记录学习 /** * 返回当前屏幕是否为竖屏. * @param context * @return 当且仅当当前屏幕为竖屏时返回true,否则返回false. */ public s ...
- ie-css3.htc 可以让IE低版本浏览器支持CSS3 的一个小工具
ie-css3.htc 先说道说道这斯是弄啥嘞 ie-css3.htc是一个可以让IE浏览器支持部份CSS3属性的htc文件,不只是box-shadow,它还可以让你的IE浏览器支持圆角属性borde ...
- Kernel Methods (5) Kernel PCA
先看一眼PCA与KPCA的可视化区别: 在PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?里已经推导过PCA算法的小半部分原理. 本文假设你已经知道了PCA算法的基本原理和步骤. 从原始输入 ...
- hoj2662 状态压缩dp
Pieces Assignment My Tags (Edit) Source : zhouguyue Time limit : 1 sec Memory limit : 64 M S ...
- shell中逻辑与的两种表示方法
bash中表示逻辑与的两种方法: (1)[ $state == "running" -a $name == "zone1" ] (2)[[ $state == ...
- 事件冒泡是什么如何用jquery阻止事件冒泡
(1)什么是事件起泡 首先你要明白一点,当一个事件发生的时候,该事件总是有一个事件源,即引发这个事件的对象,一个事件不能凭空产生,这就是事件的发生. 当事件发生后,这个事件就要开始传播.为什么要传播呢 ...