使用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实现服务器管理器的更多相关文章

  1. Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息, 请查看服务器日志。

    错误描述: 发布时控制台出现: 部署错误: 尚未授予访问 Tomcat 服务器的权限.请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用 ...

  2. Windows Server 2012 R2 服务器管理器介绍和配置使用

    1. 服务管理器是用于管理系统服务的管理工具.一般常用于windows系统,使用这个工具你可以启动.停止服务:设置服务是自动.手动启动或禁用:查看某个服务的相关信息:设置服务以什么用户启动等等(一般包 ...

  3. [转]给Linux系统管理员准备的Nmap命令的29个实用范例+ tsysv 系统服务器管理器

    原文链接:http://os.51cto.com/art/201401/428152.htm Nmap即网络映射器对Linux系统/网络管理员来说是一个开源且非常通用的工具.Nmap用于在远程机器上探 ...

  4. 无法打开运行空间池,服务器管理器winrm插件可能已损坏或丢失

    在使用windows2012 的服务器或云主机时,服务器安装不了iis服务. 提示 “无法打开运行空间池,服务器管理器winrm插件可能已损坏或丢失”. 这个问题可能的原因是您的机器未设置虚拟内存,可 ...

  5. SuperSocket 服务器管理器 (ServerManager)

    SuperSocket服务器管理器文档 客户端安全证书验证 在 TLS/SSL 安全通信中, 客户端的安全证书不是必需的, 但是有些系统需要更高级别的安全保障. 因此有些用户提出了在服务器端验证客户端 ...

  6. SuperSocket 服务器管理器客户端

    SuperSocket 服务器管理器当前有两种类型的客户端, Silverlight客户端和WPF客户端.这两种客户端的代码都在源代码中的"Management"目录,你可以自行编 ...

  7. 流畅的python第十五章上下文管理器和else块学习记录

    with 语句和上下文管理器for.while 和 try 语句的 else 子句 with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文.这么做能避免错误并减少样板代码, ...

  8. python中的with与上下文管理器

    #转载请留言联系 很多人平时需要打开文件进行读取写入操作时,通常这样: f = open('文件路径','w') f.write(data) f.close 这样写有一个潜在的问题,如果在调用 wri ...

  9. python之with语句结合上下文管理器

    所谓上下文管理器即在一个类中重写了__enter__方法和__exit__方法的类就可以成为上下文管理器类. 我们可以通过with语句结合上下文管理器简化一些操作. 使用with语句结合自定义上下文管 ...

随机推荐

  1. 垃圾回收GC

    ​ 每种语言都有自己的垃圾回收机制.接下来我们来讲一下python的垃圾回收机制. 小整数对象池:python对小整数的定义为[-5,257),这些整数对象是提前建立好的,不会被垃圾回收.单个字母也一 ...

  2. Shevon's Blog

    由于a link是disabled属性设置成true,只是颜色变灰色但是还能提交.要想不能提交,可以删除href属性:disable link[html] view plaincopyfunction ...

  3. 谈谈Vue的递归组件

    2月最后一天,而且还四年一遇,然而本月居然一篇博客没写,有点说不过去.所以,今天就来谈谈Vue的递归组件.我们先来看一个例子: See the Pen 递归组件 by imgss (@imgss) o ...

  4. sublime 安装Anaconda插件 配置python开发环境

    我的sublime 3  python 3.6.6 安装Anaconda插件 由于Anaconda插件本身无法知道Python安装的路径,所以需要设置Python主程序的实际位置.选择Settings ...

  5. Java工作流引擎结合可视化表单开发,10分钟完成一个业务流程发布

    回忆以前工作流引擎的应用,感觉历历在目啊!当初公司接了一个项目关于政府单位公文流转的管理系统,一开始客户跟我画了十多张业务流程图.话说这十多张业务流程图,涉及的业务范围还蛮多,像用审批授权,开通流程, ...

  6. APPium+Python+iOS屏幕滑动方法对比

    最近在学习appium自动化,对iOS手机进行滑动操作进行总结: 1.mobile:scroll;该方法在实际使用调用时,会滚动2次.执行时间很长. 向下滚动整个屏幕driver.execute_sc ...

  7. 使用veloticy-ui生成文字动画

    前言 最近要实现一个类似文字波浪线的效果,使用了velocity-ui这个动画库,第一个感觉就是使用简单,代码量少,性能优异,在此简单介绍一下使用方法,并实现一个看上去不错的动画.具体使用方法可以点击 ...

  8. Eight II HDU - 3567

    Eight II Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 130000/65536 K (Java/Others)Total S ...

  9. IDEA激活码(可用2100年,亲测有效)

    三步骤: 1.下载rar包 2.将rar中bin包内容替换IDEA安装目录下bin内容,然后编辑idea.exe.vmoptions和idea64.exe.vmoptions文件,编辑内容一样 将最后 ...

  10. PTP从时钟授时模块应用及介绍

    PTP从时钟授时模块应用及介绍 随着网络技术的不断进步和发展,NTP网络时间协议已经满不了一些精密设备和仪器的精度要求,这时就需要精度更高的PTP协议,PTP协议是一种应用于分布式测量和控制系统中的精 ...