【CSDN开源夏令营】 基于Web的SSH客户端,实现跨平台的云服务管理(二)环境搭配

【CSDN开源夏令营】 基于Web的SSH客户端,实现跨平台的云服务管理(二)开发环境搭建

看了前言,我想大家应该都了解了我们想做的是什么,简单来说我们要做的就是一个基于web的仿ssh客户端,让使用linux的同学可以通过web实现跨平台管理远程linux系统主机~

下面我来介绍一下开发环境的搭建:
  • 第一步:你需要一个Linux的操作系统(我使用的是64位centOS 6.3)
注意最好不要使用windows系统部署,windows操作系统部署环境是一件很麻烦的事,需要装很多依赖包。
如果你像我一样恰好没有Linux操作系统又懒的装Red Hat,最好的方法就是在腾讯或者阿里租一个linux的云服务器,我用的是cent OS 6.3版本,公网网址是203.195.241.52


  • 第二步:安装SSH客户端(我使用的是Putty)
推荐使用Putty或SSH Secure File Transfer Client、SSH Secure Shell Client

由于我的linux主机是架在云服务器上的,所以我需要远程从我的win7系统连到linux来操控linux主机部署开发环境。
我相信大家都会安装SSH客户端,我就不赘述了。安装说明百度一搜也一大把。

题外话:我每次想到自己是在通过ssh客户端开发一个取代ssh客户端本身的东西,心里就觉得怪怪的。。。(如果ssh客户端是个人的话,她一定会觉得我是一个过河拆桥、始乱终弃的人尴尬

  • 第三步:安装必要的开发依赖

1.安装依赖包

# yum install -y python python-pip gcc python-devel setuptool python-pam openssl openssl-devel wget git make gcc-c++ patch pam_radius dtach

2.安装nodejs

2.1下载nodejs
# wget http://nodejs.org/dist/v0.8.7/node-v0.8.7.tar.gz

2.2解压文件

# tar xvf node-v0.8.7.tar.gz

2.3进入解压目录

# cd node-v0.8.7


2.4检查所需要配置(如果前面依赖包都安了的话可以省略)

# ./configure


2.5进行安装:

# make
# make install

 

2.6检查是否成功安装,输入命令:

# node -v

如果安装成功会输出相应版本号,如:

v0.8.7


3部署tty.js到服务器(github源代码:https://github.com/chjj/tty.js

3.1用npm安装tty
# npm install -g tty.js
3.2打开tty目录的lib
# cd usr/local/lib/node_modules/tty.js/lib
3.3在该目录下用vi新建一个test.js
# vi test.js
3.3.1粘贴以下命令到test.js
var tty = require('tty.js');

var app = tty.createServer({
  shell: 'bash',
  users: {
    foo: 'bar'
  },
  port: 8000
});

app.get('/foo', function(req, res, next) {
  res.send('bar');
});

app.listen();
3.3.2按esc退出insert模式输入:wq保存文件
3.4开启tty.js服务
# node tty.js

如果部署成功服务会部署在本地端口8000上

用户名是foo,密码是bar

4.部署gateone到服务器(github源代码:https://github.com/liftoff/GateOne

4.1在/usr/local/src导入第三方软件源
# wget  http://mirrors.ispros.com.bd/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm
# wget  http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
# rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
4.2用pip安装软件
# pip install tornado pyopenssl kerberos
4.3安装tornado
# wget https://pypi.python.org/packages/source/t/tornado/tornado-2.4.1.tar.gz
# tar -zxf tornado-2.4.1.tar.gz 
# cd tornado-2.4.1
# python setup.py build
# sudo python setup.py install
4.4安装Imaging
# wget http://effbot.org/media/downloa# ds/Imaging-1.1.7.tar.gz
# tar -zxvf Imaging-1.1.7.tar.gz
# vcd Imaging-1.1.7
# python setup.py install
4.5.安装ordereddict
# wget https://pypi.python.org/packages/source/o/ordereddict/ordereddict-1.1.tar.gz
# tar -zxvf ordereddict-1.1.tar.gz
# cd ordereddict-1.1
# python setup.py install
4.6部署gateone
# wget http://cloud.github.com/downloads/liftoff/GateOne/gateone-1.1-1.noarch.rpm
# rpm -ivh gateone-1.1-1.noarch.rpm
小提示:如果你在下载的时候出现建立ssl连接失败,请关闭防火墙。如果关闭防火墙还是不行就先用window系统下好文件,再用ssh的ftp传到linux指定目录。
4.7配置pateone
Gateone默认安装路径为 /opt/gateone
4.7.1.运行gateone: 
# /opt/gateone/gateone.py
首次运行gateone 会在/opt/gateone 下生成 server.conf 配置文件
小提示:[ctrl+c 关闭gateone进程]
4.7.2.修改server.conf
session_timeout = “1d”
origins = "http://localhost;https://localhost;” 后面加上https://本机ip地址(如我的就是https://203.195.241.52)
小提示:是加上 https://本机ip地址而不是https://本机ip地址/(例如我的是 https://203.195.241.52而不是加https://203.195.241.52/)
3.启动gateone

# service gateone start

  • 总结
通过体验现在已有的参考开源tty.js和gateone,我在下面为这两个项目做一个介绍:

1.tty.js:我把它架设在我的服务器http://203.195.241.52:8000/供参考
它是一个支持在浏览器中运行的命令行窗口,基于node.js平台,依赖socket.io库,通过websocket与Linux系统通信。
  • 特性:
  • 支持多tab窗口模型
  • 支持vim,mc,irssi,vifm语法
  • 支持xterm鼠标事件
  • 支持265色显示
  • 支持session

2.GateOne:我把它架设在我的服务器http://203.195.241.52/供参考

gateone是一个HTML5基于Web的终端仿真器和SSH客户端。

  • 特性:
  • 没有浏览器插件需要!告别的Java,Flash和的ActiveX的安全问题。

  • 多用户和多终端:数百个用户同时和终端都可以从浩哼硬件送达。

  • 先进的终端仿真,包括256色,看中文字样式,和更多的支持。

  • 支持捕获和内联内的终端显示图像和PDF文件(见截图)。

  • 输入您的母语!gateone支持Unicode,国际键盘布局,和本地化的字符串(国际或国际化)。

  • 自然的复制和粘贴操作:选中文本,然后使用浏览器的原生上下文菜单。在Mac上可以使用⌘-c和⌘-V和Linux桌面可以单击鼠标中键至糊状。按住Shift键插入的作品呢!

  • 即使浏览器被关闭或断开终端会话就可以恢复。它们也可以从一个完全不同的计算机恢复。你再也不用担心办公室的VPN再次断开!

  • 支持用户会话的服务器端日志记录通过系统日志,远程系统日志,或者直接到磁盘的任意组合。

  • gateone可以嵌入到任何Web应用程序。JavaScript的几行是所有需要!这里有一个互动式教学课程涵盖如何嵌入在测试目录(hello_embedded)可用。

  • 许多认证机制的支持:匿名,则Kerberos(单点登录与Active Directory!),聚丙烯酰胺,谷歌认证,并有一个为应用程序中嵌入gateone(见的例子在测试目录中的聊天应用程序一个OpenID样的WebSocket API它是如何工作)。

  • gateone是一个易于定制:主题和插件可以增加功能或覆盖任何东西。事实上,gateone的SSH功能是通过一个插件完全实现。

  • 插件可以用Python,JavaScript和CSS的任意组合。

  • gateone一台服务器可以停止和启动时没有用户失去他们的终端上运行的应用程序(甚至是SSH会话保持联系!)。

  • 在SSH插件允许用户复制的会话,而不必重新输入他们的用户名和密码(它重新使用现有的SSH隧道)。它还支持基于密钥的认证,并包括支持RSA,DSA,ECDSA,甚至X.509证书的SSH身份管理器。

  • 在SSH插件还提供了一个函数库插件可以使用到当前连接的终端上无缝地执行后台操作。您可以捕获该输出从JavaScript和做任何你想做的事情。

  • 书签插件可以让你追踪所有与标记,分类支持您的主机,并包含一个超快速的搜索。它的建立是为了处理数以千计的书签,并可以与任何网址你想使用-它不仅限于SSH!

  • 该日志记录插件包括日志查看器,允许用户进行排序,浏览,以至出口他们的终端会话可以共享自包含的HTML文件的录音。演示在命令行上任何东西都可以很简单,比如执行任务,并点击一个按钮!

  • 播放插件允许用户后退和播放它们连接的终端会话的实时,就像视频!这可以通过播放控制按钮或按住Shift键的同时滚动来完成。

  • 便利的插件增加了许多方便的功能:
    • IPv4和IPv6地址成为可以执行反向DNS查找可点击的元素。
    • 的'ls-l的'输出转换成可以执行用户和组查找,把字节转换成可读的字符串,甚至告诉你'文件模式相当于“是权限字段的内容(例如:点击”CRW可点击元素-RW-RW-'会告诉你,“(字符设备)相等于权限”CHMOD 0666'“)。
    • 系统日志消息的自动语法高亮。
  • 该插件示例演示了如何编写自己的插件,并展示了在SSH插件的exec_remote_command()功能。

  • gateone依赖Python 2.6 +,Python 3,甚至pypy!

  • 充当Web服务器,gateone守护小,重量轻,能够被包含在嵌入式设备

总结:

tty.js的功能明显低于gateone,并且有着不少差距.但是无论是tty.js,和gateone在功能上都有着不完善的地方
tty.js几乎完全没有考虑安全性与易用性和用户体验。

  • 它不支持上传文件到服务器
  • 它虽然能支持账户登录,但是密码是明文存在配置文件里面的
  • 登陆后只能远程操纵服务器本机。
  • 它不支持上传文件。
  • 它在UI和用户体验方面几乎没有在意。
  • 代码兼容性差。不支持的口令较多。
再说gateone,gateone相比起tty.js,功能上可以说强大了不少。但是在安全性和易用性两个方面,它还有这需要改进的地方。

  • 文件上传的用户体验不是很好。
  • 用户体验几乎没有考虑
  • 安全性方面还可以加强
  • 网站功能不直观
我们可以对其进行一些特性迭代和优化,增强他的UI,易用性来增强用户体验。
例如增强它的安全性、文件或文件夹可以使用拖拽方式上传、显示文件结构、支持vim,top等口令、在命令行模拟窗口给鼠标右键增加粘贴等常用功能。












版权声明:本文为wangpuyue07原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。