博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python编写的ssh客户端[类似putty]
阅读量:5059 次
发布时间:2019-06-12

本文共 1930 字,大约阅读时间需要 6 分钟。

转载请注明出处:

 

windows下可以通过putty以ssh方式连接linux主机。但putty也有一些问题:比如没有保存session,乱码等等。

偶然发现Python也有ssh模块,学习的同时尝试使用python编写一个类似putty的ssh客户端。

1.环境准备

python2.7 + PyCrypto + paramiko + ecdsa

后面三个是python的扩展模块,实现了ssh连接功能。

需要分别下载这三个模块,安装。

edssa下载地址:

安装十分简单,进入模块根目录执行 python setup.py build install命令即可。

说明:linux下可按此安装。windows下我未编译通过,可使用编译好的版本,直接拷贝至Lib\site-packages下即可。

下面是一个windows下编译好的版本:

 

2.原理

1)通过paramiko的ssh模块连接指定主机;

2) 通过SSHClient.exec_command在远程主机上执行命令;

3)通过exec_command返回的stdout,stdin,stderr进行交互;

4)保存成功连接的主机信息(session),可以通过ls命令查看, session id命令,直接启动新连接;

5)可在windows和linux下运行,写程序时需要注意他们的差别。

3.代码ssh.py

#!/usr/bin/python# -*- coding: utf-8 -*- import os,sysimport paramiko  import threading  import platform curr_ssh = None	curr_prompt = ">>" #使用说明		def printUsage():	print "    !ls                     :list sessions."	print "    !session id             :connect session."	print "    !conn host user password:connect host with user."	print "    !exit                   :exit." #连接	def conn(ip,username,passwd):	try:		ssh = paramiko.SSHClient()  		ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  		ssh.connect(ip,22,username,passwd,timeout=5)  		print "Connect to ",ip," with ",username		global curr_prompt		curr_prompt=username+"@"+ip+">>"		return ssh	except:		return None		#加载以前的连接信息sessions=[]def loadSessions():	global sessions	try:		f = open("sessions")		sessions = f.readlines()		f.close()	except:		pass #执行本地命令,ssh.py的命令		def exe_cmd_local(cmd):	if(cmd == "!ls"):		loadSessions()		global sessions		i=0		print "Sessions:"		for s in sessions:			print"[%d] %s" %(i,s)			i+=1	else:		vals = cmd.split(' ')		if(vals[0]=="!session"):			id = (int)(vals[1])			if(id

  

4.使用

 

可以直接ssh.py,进入主菜单:

通过!conn   host  usrname  passwd连接:

也可以ssh.py  host  usrname  passwd,直接连接指定的客户机。

 

可以通过!ls 查看保存的Session列表:

通过!session id 直接启动新窗口并连接:

通过!exit退出。

 

连接后可远程执行shell 命令:

5.问题

1)部分ssh命令无法执行;

2)界面显示太弱,需要改进。

转载于:https://www.cnblogs.com/anita-harbour/p/9298034.html

你可能感兴趣的文章
[ZJOI2007]棋盘制作 【最大同色矩形】
查看>>
合并单元格
查看>>
swift-初探webView与JS交互
查看>>
IOS-图片操作集合
查看>>
Android bitmap图片处理
查看>>
Android应用程序进程启动过程的源代码分析
查看>>
adb logcat 命令行用法
查看>>
Redis学习手册(Key操作命令)
查看>>
模板统计LA 4670 Dominating Patterns
查看>>
泛型第23条:请不要在新代码中使用原生态类型
查看>>
非对称加密
查看>>
bzoj 3413: 匹配
查看>>
从下周开始就要采用网上记录值班日志了
查看>>
在qq中可以使用添加标签功能
查看>>
eclipse 自定义布局
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>
[翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
查看>>
简化通知中心的使用
查看>>
SpringMVC的@Validated校验注解使用方法
查看>>