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 ...
随机推荐
- 屠龙之路_向恶龙Alpha进发_FirstDay
听说山的那边海的那边,出现了一头名为Alpha的恶龙,此龙无恶不作,还掠走了国王那漂酿的公主.少年很是气愤,大吼:"放开那女孩!!!",于是找到了志同道合的六位勇士,一起组成了屠龙 ...
- 十天冲刺---Day3
站立式会议 站立式会议内容总结: git上Issues新增内容: 燃尽图 照片 组长情绪爆炸是很可怕的事情.这里自责一下. 进度缓慢是一件非常头疼的事情.还有每个人的时间都很紧张,除了学习,还有各种工 ...
- Oracle之物化视图
来源于:http://www.cnblogs.com/Ronger/archive/2012/03/28/2420962.html 近期根据项目业务需要对oracle的物化视图有所接触,在网上搜寻关于 ...
- YY游戏私有云平台实践 (转自InfoQ )
作者 风河 发布于 2016年1月13日 | 讨论 编者按:YY游戏的页游早在2013年就在云平台上运行,其Cloud 1.0已经支撑几十万的同时在线用户.日前,YY游戏云平台进行了Cloud 2 ...
- ie-css3.htc 可以让IE低版本浏览器支持CSS3 的一个小工具
ie-css3.htc 先说道说道这斯是弄啥嘞 ie-css3.htc是一个可以让IE浏览器支持部份CSS3属性的htc文件,不只是box-shadow,它还可以让你的IE浏览器支持圆角属性borde ...
- 哈希 poj 3274
n个牛 二进制最多k位 给你n个数 求max(j-i)&&对应二进制位的和相同 7 1 1 1 倒的 6 0 1 1 7 1 1 1 2 0 1 ...
- 100114H
模拟 #include<iostream> #include<Cstdio> using namespace std; int n,k; ]; ][]; int main() ...
- Java-URLConnection类详解
抽象类 URLConnection 是所有类的超类,它代表应用程序和 URL 之间的通信链接.此类的实例可用于读取和写入此 URL 引用的资源.通常,创建一个到 URL 的连接需要几个步骤: open ...
- C#-WebForm-★ 制作图片验证码 ★
在前台放在如下四个控件 <div> <asp:TextBox ID="TextBox1" runat="server"></asp ...
- 控件(选择类): ListBox, RadioButton, CheckBox, ToggleSwitch
1.ListBox 的示例Controls/SelectionControl/ListBoxDemo.xaml <Page x:Class="Windows10.Controls.Se ...