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模块使用的更多相关文章

  1. paramiko模块的安装

    1.找到自己python安装的目录(默认路径:C:\Users\zhangliyuan\AppData\Local\Programs\Python\Python35) 注:cmd中所有命令 2.进入S ...

  2. python远程连接paramiko 模块和堡垒机实现

    paramiko使用 paramiko模块是基于python实现了SSH2远程安全连接,支持认证和密钥方式,可以实现远程连接.命令执行.文件传输.中间SSH代理功能 安装 pip install pa ...

  3. 利用paramiko模块实现堡垒机+审计功能

    paramiko模块是一个远程连接服务器,全真模拟ssh2协议的python模块,借助paramiko源码包中的demos目录下:demo.py和interactive.py两个模块实现简单的堡垒机+ ...

  4. 在Windows和Linux上安装paramiko模块以及easy_install的安装方法

    一.paramiko模块有什么用? paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.由于使用的是python这样的能够跨平台运行的语言 ...

  5. paramiko模块-2

    如何用paramiko模块模拟登入服务器,并记录操作日志,起到审计的作用? 各个client ---(连接跳转机)--->(跳转机)------>各自的目标服务器. 目前我们公司的跳转机, ...

  6. paramiko模块

    安装: # pycrypto,由于 paramiko 模块内部依赖pycrypto,所以先下载安装pycrypto (1) wget http://ftp.dlitz.net/pub/dlitz/cr ...

  7. Win7下Python2.7环境安装paramiko模块

    Win7下Python2.7环境安装paramiko模块,经过安装并测试成功,整理文档如下: 1.下载安装Windows版本的Python2.7,我默认装在C:\Python27 我的python已经 ...

  8. Python Paramiko模块与MySQL数据库操作

    Paramiko模块批量管理:通过调用ssh协议进行远程机器的批量命令执行. 要使用paramiko模块那就必须先安装这个第三方模块,仅需要在本地上安装相应的软件(python以及PyCrypto), ...

  9. paramiko模块,线程,进程

    关于paramiko模块 paramiko是基于Python实现的ssh2远程安全连接,支持认证及密钥方式远程执行命令.文件传输,中间ssh代理等 paramiko的安装: 安装好之后,用parami ...

  10. Python paramiko 模块

    paramiko模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: import paramiko # 创建SSH对象 ssh ...

随机推荐

  1. Install Sogoupinyin in Ubuntu

    If you use Ubuntu 15.10,search 'sogou' in Software Center.If you can see sogoupinyin there.You can g ...

  2. 关于提高python程序执行效率的思路和想法

    相比编译型语言(C系列)python胜在简介的语法和优雅的动态编程体验,但是在执行效率上,python有解释性语言先天的劣势——执行效率较低,为了让编写出的程序获得更快的执行效率,开启此文章. pyt ...

  3. android开发------编写用户界面之线性布局(补充知识)

    在前面的文章中 http://www.cnblogs.com/ai-developers/p/android_linearlayout.html 我们看到了布局中有这样一个属性: layout_wei ...

  4. 【Alpha版本】项目测试

    我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 03140241 王婷婷 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬 ...

  5. Percona 开始尝试基于Ceph做上层感知的分布式 MySQL 集群,使用 Ceph 提供的快照,备份和 HA 功能来解决分布式数据库的底层存储问题

    本文由 Ceph 中国社区 -QiYu 翻译 英文出处:Using Ceph with MySQL 欢迎加入CCTG Over the last year, the Ceph world drew m ...

  6. Android Material Design 控件常用的属性

    android:fitsSystemWindows="true" 是一个boolean值的内部属性,让view可以根据系统窗口(如status bar)来调整自己的布局,如果值为t ...

  7. 分布式搜索引擎Elasticsearch PHP类封装 使用原生api

    //官方的 php  api写的鸡肋了,下面这个类可以使用 es api 操作. <?php class ElasticSearch { public $index; function __co ...

  8. git 常用命令使用

    1. 初始化仓库 git init 2. 查看当前状态 git status(1)Changes not staged for commit:(2)Changes to be committed: 3 ...

  9. 【BZOJ 3242】【UOJ #126】【CodeVS 3047】【NOI 2013】快餐店

    http://www.lydsy.com/JudgeOnline/problem.php?id=3242 http://uoj.ac/problem/126 http://codevs.cn/prob ...

  10. NHibernate中session.update()及session.merge()的区别

    今天的工作中遇到一个奇怪的问题,如下: "a different object with the same identifier value was already associated w ...