基于xterm.js的webssh实现

使用到的组件:

1 开源框架:xterm.js https://github.com/sourcelair/xterm.js

参考实例。只需要在页面引用css和js文件,再加上一个<div id="terminal-container"></div>即可。

<!doctype html>
<html>
    <head>
        <title>xterm.js demo</title>
        <link rel="stylesheet" href="/css/xterm.css" />
        <link rel="stylesheet" href="/css/fullscreen.css" />
        <link rel="stylesheet" href="/css/style.css" />
        <script src="/js/xterm.js" ></script>
        <script src="/js/attach.js" ></script>
        <script src="/js/fit.js" ></script>
        <script src="/js/fullscreen.js" ></script>
        <script src="/js/main.js" defer ></script>
    </head>
    <body>
        <h1>
            xterm.js: xterm, in the browser
        </h1>
        <div id="terminal-container"></div>
    </body>
</html>

2 Python框架tornado。

在tornado中定义URL的映射:

(r'/ssh',views.WebTerminalHandler) 这表示了websocket的映射。

这里的挂件就是类WebTerminalHandler,它继承了tornado.websocket.WebSocketHandler。主要有三个方法:

def onopen(self) 表示打开了websocket。

def on_message(self,message) 表示接到浏览器通过websocket传输的字符,这里一次一个字符。

def on_close(self) 表示websocket关闭。

主要实现这三个方法即可。

每个WebTerminalHandler代表了一个客户端请求(一般是一个页面请求)。

3 paramiko库。下面第一部分初始化、连接,生成一个shell请求。第二部分读取shell中的内容,第三部分向shell中输入内容。

sshclient=paramiko.SSHClient()
sshclient.load_system_host_keys()
sshclient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshclient.connect(hostname,port,username,password)
chan=sshclient.invoke_shell(term='xterm')

#################################################################

while True:
	data=chan.recv(512)
	if not data:
		break
	#print(data)

#################################################################

chan.send(message)

这里注意,可以用一个sshclient的connection产生多个shell连接。

 


其他一些注意事项:

tornado.websocket.WebSocketHandler中def on_message(self,message)的message每次都是一个字符,但是unicode类型。处理方式要使用unicode的方式。

 

Python中字符和数字的转换

>>> ord('a')
97
>>> chr(97)
'a'
>>> ord('\r')
13
>>> chr(13)
'\r'
>>> ord('he')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ord() expected a character, but string of length 2 found
>>>

 

转载于:https://my.oschina.net/shawnplaying/blog/688712

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值