python使用argparse 、paramiko实现服务器管理器
使用argparse,paramiko两个包去实现简易的服务器管理器,完成两种方式的连接( 密码和密钥 ),以及命令行交互,文件上传下载。
相比sys.argv的方式去判断传入的参数,如果参数较多那么argparse包更易维护和修改,远程控制模块paramiko可以很轻易的实现远控的功能
注意:paramiko中的SSHClient对象的exec_command在执行cd命令的时候没有效果,需要和其它命令一起执行,
例如:stdin, stdout, stderr = client.exec_command('cd test; ls')
话不多说,直接上代码:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Riy import logging
import argparse
import paramiko logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
filename='SSHlog.log',
filemode='a'
) class RiySSH:
def ssh_parse(self):
'''设置参数'''
parser = argparse.ArgumentParser("Riy command line ssh server operate 服务器操作命令行工具...")
parser.add_argument('-H', '--host', dest="HOST", action="store", help="要连接的主机")
parser.add_argument('-P', '--port', dest="PORT", action="store", help="连接主机的端口")
parser.add_argument('-u', '--username', dest="USER", action="store", help="连接的用户名")
parser.add_argument('-p', '--password', dest="PWD", action="store", help="使用密码进行认证")
parser.add_argument('-s', '--ssh', dest="SSH", action="store", help="使用密钥文件进行认证")
parser.add_argument('--shell', dest="SHELL", action="store_true", help="进入命令交互模式")
parser.add_argument('-U', '--upload', dest="UPLOAD", nargs="*", help="上传文件,需要追加文件名")
parser.add_argument('-D', '--download', dest="DOWNLOAD", nargs="*", help="下载文件,需要追加文件名")
parser.print_help()
args = parser.parse_args()
return args def connect_password(self, HOST, PORT, USER ,PWD=None, SSH=None):
'''进行服务器连接'''
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
private = paramiko.RSAKey.from_private_key_file(SSH)
client.connect(hostname=HOST, port=PORT, username=USER, password=PWD, pkey=private)
return client def connect_cmd(self, client):
'''命令行交互'''
while True:
print('请输入shell命令,按q键退出:')
CMD = input('>>')
stdin, stdout, stderr = client.exec_command(CMD)
print(stdout.read().decode('utf-8'))
if CMD == 'q':
break def download_file(self, client, remote_file_path, local_file_path):
'''下载文件'''
ftp_client = client.open_sftp()
ftp_client.get(remote_file_path, local_file_path) def upload_file(self, client, local_file_path, remote_file_path):
'''上传文件'''
ftp_client = client.open_sftp()
ftp_client.put(local_file_path, remote_file_path) def main():
a = RiySSH()
args = a.ssh_parse()
if args.PWD or args.SSH:
HOST = args.HOST
PORT = args.PORT
USER = args.USER
PWD = args.PWD
SSH = args.SSH
client = a.connect_password(HOST, PORT, USER, PWD, SSH)
if args.UPLOAD:
a.upload_file(client, args.UPLOAD[0], args.UPLOAD[1])
if args.DOWNLOAD:
a.download_file(client, args.DOWNLOAD[0], args.DOWNLOAD[1])
if args.SHELL:
a.connect_cmd(client)
client.close() if __name__ == '__main__':
main()
python使用argparse 、paramiko实现服务器管理器的更多相关文章
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息, 请查看服务器日志。
错误描述: 发布时控制台出现: 部署错误: 尚未授予访问 Tomcat 服务器的权限.请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用 ...
- Windows Server 2012 R2 服务器管理器介绍和配置使用
1. 服务管理器是用于管理系统服务的管理工具.一般常用于windows系统,使用这个工具你可以启动.停止服务:设置服务是自动.手动启动或禁用:查看某个服务的相关信息:设置服务以什么用户启动等等(一般包 ...
- [转]给Linux系统管理员准备的Nmap命令的29个实用范例+ tsysv 系统服务器管理器
原文链接:http://os.51cto.com/art/201401/428152.htm Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具.Nmap用于在远程机器上探 ...
- 无法打开运行空间池,服务器管理器winrm插件可能已损坏或丢失
在使用windows2012 的服务器或云主机时,服务器安装不了iis服务. 提示 “无法打开运行空间池,服务器管理器winrm插件可能已损坏或丢失”. 这个问题可能的原因是您的机器未设置虚拟内存,可 ...
- SuperSocket 服务器管理器 (ServerManager)
SuperSocket服务器管理器文档 客户端安全证书验证 在 TLS/SSL 安全通信中, 客户端的安全证书不是必需的, 但是有些系统需要更高级别的安全保障. 因此有些用户提出了在服务器端验证客户端 ...
- SuperSocket 服务器管理器客户端
SuperSocket 服务器管理器当前有两种类型的客户端, Silverlight客户端和WPF客户端.这两种客户端的代码都在源代码中的"Management"目录,你可以自行编 ...
- 流畅的python第十五章上下文管理器和else块学习记录
with 语句和上下文管理器for.while 和 try 语句的 else 子句 with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文.这么做能避免错误并减少样板代码, ...
- python中的with与上下文管理器
#转载请留言联系 很多人平时需要打开文件进行读取写入操作时,通常这样: f = open('文件路径','w') f.write(data) f.close 这样写有一个潜在的问题,如果在调用 wri ...
- python之with语句结合上下文管理器
所谓上下文管理器即在一个类中重写了__enter__方法和__exit__方法的类就可以成为上下文管理器类. 我们可以通过with语句结合上下文管理器简化一些操作. 使用with语句结合自定义上下文管 ...
随机推荐
- babel-runtime 使用场景
Babel 转译后的代码要实现源代码同样的功能需要借助一些帮助函数,例如,{ [name]: 'JavaScript' } 转译后的代码如下所示: 'use strict'; function _de ...
- Proto3:C++代码生成指南
本章节实际上是介绍Protocol Buffer编译器从给定的protocol定义中生成的C++代码.所有proto2和proto3生成的代码不同之处都会高亮标出 --- 需要注意的是这些不同之处只是 ...
- ARTS 第 1 周
每周一道算法.点评一篇英文技术文章.学习一个技术技巧.分享一个技术观点和思路 Algorithm 题目:两数和 给定一个整数数组,返回这两个数字的索引,使它们相加为一个指定的数. 因为是返回两个数字的 ...
- XX系统测试总结报告
XX系统测试总结报告 1 引言 1.1 编写目的 编写该测试总结报告主要有以下几个目的 1. 通过对测试结果的分析,得到对软件质量的评价 2. 分析测试的过程,产品,资源,信息, ...
- C轮魔咒:智能硬件为什么融资难
据相关媒体不完全统计,2015年完成融资的智能硬件公司集中在A轮和B轮,但能挺进C轮的少之又少.对智能硬件创业的年终盘点也显示,此前比较热门的手环.智能家居等主要单品在去年明显出现了回落.陷入C轮魔咒 ...
- 【pic+js+gh】免费高速图床方案
本文用到的工具或网站 PicGo jsdelivr github 速度对比 Github的速度: jsdelivrCDN的速度: 下载PicGo 首先进入PicGo的下载地址 选择最新版本下载,根据自 ...
- Hibernate入门之主键生成策略详解
前言 上一节我们讲解了Hibernate命名策略,从本节我们开始陆续讲解属性.关系等映射,本节我们来讲讲主键的生成策略. 主键生成策略 JPA规范支持4种不同的主键生成策略(AUTO.IDENTITY ...
- 8——PHP循环结构&&条件结构
*/ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...
- eggjs+vue+nginx配置
安装node https://github.com/nodesource/distributions#installation-instructions-1 注意使用No root privilege ...
- 浏览器内核之 HTML 解释器和 DOM 模型
微信公众号:爱写bugger的阿拉斯加如有问题或建议,请后台留言,我会尽力解决你的问题. 前言 此文章是我最近在看的[WebKit 技术内幕]一书的一些理解和做的笔记.而[WebKit 技术内幕]是基 ...