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 ...
随机推荐
- thinkphp 配置多数据库
1配置文件中配置另一数据库连接信息 例如: 'TestModelConfig' => array( //'配置项'=>'配置值' 'DB_TYPE' => 'mysql', // 数 ...
- Python 一些总结和比较
数据类型
- Collection中list集合的应用常见的方法
集合 : 用存放对象的容器(集合) Collection : 跟接口 : 单列集合 ---> List :有序的 ,元素是可以重复的. ---> ...
- python基础-range用法_python2.x和3.x的区别
#range帮助创建连续的数字,通过设置步长来指定不连续 python2.7 #直接就在内存中创建出来(0-99) >>> range(100)[0, 1, 2, 3, 4, 5, ...
- MyEclipse下Maven的安装配置
Maven常用命令: •mvn archetype:generate :创建 Maven 项目 •mvn compile :编译源代码 •mvn test-compile :编译测试代码 •mvn t ...
- AndroidStudio修改项目名称
项目名称修改了,想修改Android Studio 中 project的名字 右键project 的名字,refactor - rename ,填写好新名字后修改,被提示 “can’t rename ...
- 【BZOJ 4518】【SDOI 2016 Round1 Day2 T3】征途
比较明显的斜率优化DP,省选时因为时间太紧张和斜率DP写得不熟等原因只写了60分的暴力DP,其实当时完全可以对拍来检验标算的正确,但是我当时too naive- 很快打完了,调了将近一晚上QAQ,因为 ...
- caffe使用
训练时, solver.prototxt中使用的是train_val.prototxt ./build/tools/caffe/train -solver ./models/bvlc_referenc ...
- static 静态导包
静态导入 ArrayUtils 类的 INDEX_NOT_FOUND 属性和 add 方法 import static org.apache.commons.lang3.ArrayUtils.INDE ...
- bootstrap-model-弹出框背景禁止点击
bootstrap的model弹出框,默认在点击背景时会隐藏,而有时特殊效果是不允许隐藏,下面就是解决方案:本例参考来自这里 方法一: $('#myModal').modal({backdrop: ' ...