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语句结合自定义上下文管 ...
随机推荐
- Selenium的Web自动化测试(送源码)
8.1 Selenium自动化测试准备 1.Selenium介绍 Selenium是一个Web开源自动化测试框架,页面级操作,模拟用户真实操作,API从系统层面触发事件. Selenium 1.0 ...
- 码海拾遗:strcpy()、strncpy()和strcpy_s()区别
1.strcpy() 原型:char *strcpy(char *dst,const char *src) 功能:将以src为首地址的字符串复制到以dst为首地址的字符串,包括'\0'结束符,返回ds ...
- Java中间件之RMI及实例介绍 · zijian's blog
RMI介绍 远程方法调用(Remote Method Invocation)是Sun公司规定的允许在不同的JAVA虚拟机之间进行对象间通信的一种规范.在RMI中,JVM可以位于一个或多个计算机上, ...
- [Python_scrapy图片爬取下载]
welcome to myblog Dome地址 爬取某个车站的图片 item.py 中 1.申明item 的fields class PhotoItem(scrapy.Item): # define ...
- mysql长连接与短连接
什么是长连接? 其实长连接是相对于通常的短连接而说的,也就是长时间保持客户端与服务端的连接状态. 通常的短连接操作步骤是: 连接->数据传输->关闭连接: 而长连接通常就是: 连接-> ...
- win10 64位 安装JDK1.8
win10 64位 jdk1.8 配置Java环境,是否安装JRE. 一.安装得有JRE JDK和JRE分别安装再不同的文件夹下 新建:JAVA_HOME 值:JDK的安装路径 新建:CLASSPAT ...
- 新冠疫情下,亚德诺(ADI)全面加速
前言:亚德诺Analog Devices, Inc.(简称ADI),公司总部设在美国马萨诸塞州诺伍德市,设计和制造基地遍布全球.ADI公司被纳入标准普尔500指数(S&P 500 Index) ...
- jdbc里一个最靠谱的连接demo
最靠谱的jdbc连接例子 包括增删改,查一条数据,查所有数据. Bean.java public class Bean { private String id; private String numb ...
- HTML常用标签的使用
一.常见标签详解 1.<iframe>标签 HTML内联框架元素 <iframe> 表示嵌套的浏览上下文,有效地将另一个HTML页面嵌入到当前页面中.在HTML 4.01中,文 ...
- intel硬件视频加速介绍
目录 硬件视频加速技术 intel 硬件加速技术 intel 的开源媒体栈 VA-API 安装 样例 Intel Quick Sync(QSV) API支持情况 vaapi/mfx比较 安装 样例 硬 ...