精华内容
下载资源
问答
  •  广义上来说,webssh泛指一种技术可以在网页上实现一个SSH终端。从而无需Xshell之类的模拟终端工具进行SSH连接,将SSH这一比较低层的操作也从C/S架构扭成了B/S架构。  能实现webssh的组件有好几种,但归根结底都...

    【webssh】

      ——记两天来比较痛苦的历程

      广义上来说,webssh泛指一种技术可以在网页上实现一个SSH终端。从而无需Xshell之类的模拟终端工具进行SSH连接,将SSH这一比较低层的操作也从C/S架构扭成了B/S架构。

      能实现webssh的组件有好几种,但归根结底都是建立在客户端和服务端的即时通信上,有一些webssh只停留在这一层,表明客户端接入的ssh界面只是服务端本身的后台;另一种稍微高级一点的,将webssh做成一个通用的服务,网页上的ssh界面其实就和XShell一样,可以连接任何服务器可以连通的机器。由于一般服务器都会安装有ssh客户端软件,所以两者之间硬要说有很明显的区别其实也没有。

      下面来说一说我的需求吧,我做的一个资源管理系统中重要的一部分就是服务器。同时系统中也维护了各个服务器的用户和密码,那么如果在页面上按一个键,就能打开一个webssh,并且 自动登录 ,这样就能很方便地管理各个服务器了。

      基于这样一种需求的想法,我出发去找了一些项目,下面来说说几个找到的可能有用的:

    ■  GateOne

      项目地址: https://github.com/liftoff/GateOne

      详细的安装教程可以参考这篇:http://www.laozuo.org/10703.html

      这个东西被很多人称赞,使用了下也发现确实很牛。它是一个基于HTML5的webssh工程,不需要任何浏览器的任何插件就能无障碍运行。我感觉gateone最厉害的地方在于其强大的webssh界面。不仅仅是一块黑屏,它还支持多终端创建和切换,支持在终端中显示图片等内容,支持操作回放,日志审计等等功能。简直可以说比putty,XShell之类的桌面软件都要强大很多。但是その分,这个工程很大,需要的依赖很多。

      gateone的开发框架是tornado,刚好是python的,所以我看了它很长时间。。在保证有了tornado,paramiko等一系列依赖之后,下载来项目,可以考虑用python setup.py install来将gateone作为一个软件安装在服务器上,我采用的方法是python gateone.py这样的比较low的办法启动服务的。默认端口等等配置可以在gateone.py同目录下的server.conf中修改。哦对了,gateone默认使用了https协议,所以在访问的时候记得不要搞错了。

      部署完成之后,访问相关地址,可以看到gateone的界面。简单用了一下,界面的边上还有一连串工具栏,没有仔细研究,不过确实可以说是和桌面级软件一般的好用。

      不过gateone有个很大的缺点不符合我的需求,就是无法做到自动登录。gateone其实是作为一个通用的ssh客户端服务放在服务器上的,我无法在打开它的时候向其传递一些信息从而实现自动的ssh到某台服务器。为了自动登录,我甚至用jquery找到光标的DOM然后在它前面插入信息等方法,均告失败。粗粗看了下源码,觉得水平不足以改源码来实现。。于是放弃找其他办法

    ■  shellinabox

      这个项目也是一个很好的webssh,不过没有细看,因为它似乎只支持对于部署本地的访问,当然如果要访问出去也是可以,这样还是略显麻烦一点。而且自动登录的问题依然没有解决,我依然没有找到办法向webssh界面传递信息实现自动登录。

      在github上看似乎最新版本已经集合了很多其他插件比如IDE插件和其他一些美化界面的东西进去,看起来还是很漂亮的。

    ■  xterm.js

      晚上问了一下公司里有类似功能的项目是如何实现webssh的,结果被告知是使用了xterm.js,并且做这块的同事已经离职了。。只好自己研究了下xterm.js这个库。

      项目地址:https://github.com/xtermjs/xterm.js

      xterm.js是一个前端库,要实现一个完整的webssh还需要后端的支持。xterm的话可以认为它就是可以在前端画一个功能较为齐全的终端屏幕。

      哦对了,在跟着它的readme安装的时候还猜了不少坑,npm这个东西至今还是不太会用。前端的玩法有必要系统学一下。总之最后总算是搞出了xterm.js和xterm.css两个文件放到页面里实验了一下。确实画出了黑屏,不过没有交互啊。交互的话肯定要用websocket(其他双工交互方式肯定是效率不高的,简单用用可以,webssh传输强度比较大的东西还是算了),flask也就算了,django里的websocket基本不会。。无奈再回网上找找。

    ■  webssh

      项目地址: https://github.com/huashengdun/webssh

      最终找到了webssh(狭义)这个东西。其实同名的webssh之前我已经在github上找到一个,之前开运维技术大会时,听到别人的作品中也是用了那个组件。但是那里简介一看在一年前就已经不维护了,下来一试发现bug多得是,所以很快就放弃了。不过这次找到的webssh似乎和之前那个没啥关系,是同名的另一个项目。下来一试发现好得很,不仅能够实现基本的ssh界面,而且代码也不多,要自己改的话学习成本也不是很大。

      技术上,这个项目前端用的也是xterm.js,后端用的也是tornado,而且后端的目录结构相当简单易懂。部署上去之后访问进去一开始仍然是需要输入IP,端口,账号密码这些内容的界面。但是它明确写出了那个界面里用了哪些JS,于是我想到了可以在连接里加入GET参数,然后自建一个JS来把这些参数填入input中,然后再自动按一下submit,就可以实现自动登录了。

      这里不得不指出的是,webssh用的是http协议,安全方面上可能有一些不足。但是已经顾不得这么多了。。而且我把webssh部署在和我自己项目同一台服务器上,页面上采用了iframe访问webssh服务,所以相对好一点。 如果想要将webssh项目部署成https也简单,只要修改下webssh的tornado框架用到的一些源码就可以了。

      在main.py中,原先服务进程的监听启动是通过app.listen这样的方式来做的。现在只要将这部分注释掉然后重新建立一个http_server对象来监听:

    import tornado
    # ...略
    http_server = tornado.httpserver.HTTPServer(app, ssl_options={
      'certfile': 'your/path/to/certificate.crt',
      'keyfile': 'your/path/to/key.key'
    })
    http_server.listen(options.port,options.address)
    # ...略

     

      这样就可以通过https来访问webssh界面了。

      至此我的需求基本实现了,不过还有点不足,就是我不想把webssh默认的那个带有表单的界面展示出来,于是用了layer组件,在页面加载开始时就调出了一个加载界面并且指定shade为true,使得看不到后面的内容。请求成功后关掉layer,如果请求失败,就以layer.msg的方式将错误信息展现。按照webssh的main.js中默认的提示错误的方式,是将错误信息写在一个#status的div中,记得把status.text(xxx)之类的内容换成layer.msg即可。还有一个歪打正着的,默认情况输入exit退出ssh之后会回到表单界面,加上layer之后退出来不显示表单而是变成一块黑屏,很好。

      其余一些定制就是很简单了。比如把错误提示信息换成中文等等。

      这个过程中还遇到过两个小问题。第一个是当我的ssh区域作为一个iframe出现在页面上时,如果区域高度过小,比如小于400px时,ssh界面会锚定在最顶部。当输出比较多的命令被执行之后你就看不到光标了,除非盲打一个clear命令。。第二个是似乎webssh不支持很大量的数据交互。我尝试着cat了一个5M多的文件时,崩溃了。。不过我本来就是拿这个东西来做一个简单的ssh的,没必要继续加强性能。

       * 关于第一个问题还有一些小补充。webssh模拟终端的界面的大小是个很微妙的东西,上面说了高度的问题,另外还有一个宽度的问题。一般情况下,为了能够动态适配窗口的大小,我们可以实时获取window.height和window.width,然后通过计算获得到webssh终端合适的高和宽。对于width,webssh利用的前端组件xterm.js有一个问题就是最多每行只能显示80个字符。或许你可以尝试修改Terminal对象生成时传入方法的参数cols(其默认值是80),但是只要其值设置为大于80的时候就会发生超出80字符宽度部分的字符串不会自动换行,而是到本行开头去覆盖本行。

      google了挺久没有找到合适的解决方案,github上官方给出的解释是因为被连接服务器本身的tty终端字符宽度就是80,而xterm.js必须和这个宽度一样才可以正常工作。。为了webssh终端能够正常地自动换行同时也要尽量避免webssh终端区域大片屏幕都被浪费,一个曲线救国的办法就是把终端窗口宽度刚好调节成80个字符再宽一点点的样子,比如780px左右(根据屏幕大小不同可能不同)。

      以上。两天终于找到了一个好一点的解决办法。。

    展开全文
  • 它有内置的运行作为指定端口上基于WebSSH客户端并提示您一个网络终端仿真程序,而不需要访问和控制远程使用任何AJAX / JavaScript和CSS功能的浏览器你的Linux服务器的SSHShell Web服务器任何额外的浏览器插件,如...

    Shell在一个盒子 (发音为shellinabox)是由马库斯Gutschke创建一个基于Web的终端模拟器。 它有内置的运行作为指定端口上基于Web的SSH客户端并提示您一个网络终端仿真程序,而不需要访问和控制远程使用任何AJAX / JavaScript和CSS功能的浏览器你的Linux服务器的SSHShell Web服务器任何额外的浏览器插件,如FireSSH 。

    在本教程中,我将介绍如何安装Shellinabox和使用任何机器上的现代Web浏览器访问远程SSH终端 。当你与防火墙 ,只有HTTP(S)流量保护可以通过基于Web的SSH是非常有用的。

    在Linux上安装Shellinabox

    默认情况下,Shellinabox工具是通过默认的库很多Linux发行版 ,包括Debian的 ,Ubuntu和Linux Mint的 。

    确保启用了您存储库并提供从该仓库安装Shellinabox。 要检查,做Shellinabox与“ 易缓存 ”命令搜索,然后使用“ 的apt-get”命令进行安装。 `

    在Debian,Ubuntu和Linux Mint$ sudo apt-cache search shellinabox

    $ sudo apt-get install openssl shellinabox

    在RHEL,CentOS和Fedora上

    在基于Red Hat发布,则需要先启用EPEL软件库 ,然后用下面的“ 荫 ”命令来安装它。 (Fedora用户并不需要启用EPEL,它已经Fedora计划的一部分)。# yum install openssl shellinabox

    配置Shellinabox

    默认情况下,shellinaboxd TCP端口4200上监听本地主机 。 出于安全原因,我改变这个默认端口为一个随机(即6175),以使任何人都难以达到你的SSH框。 此外,在安装过程中一个新的自签名的SSL证书自动下“ 的 / var / lib中/ shellinabox”创建使用HTTPS协议。

    在Debian,Ubuntu和Linux Mint$ sudo vi /etc/default/shellinabox# TCP port that shellinboxd's webserver listens on

    SHELLINABOX_PORT=6175

    # specify the IP address of a destination SSH server

    SHELLINABOX_ARGS="--o-beep -s /:SSH:172.16.25.125"

    # if you want to restrict access to shellinaboxd from localhost only

    SHELLINABOX_ARGS="--o-beep -s /:SSH:172.16.25.125 --localhost-only"

    在RHEL,CentOS和Fedora上# vi /etc/sysconfig/shellinaboxd# TCP port that shellinboxd's webserver listens on

    PORT=6175

    # specify the IP address of a destination SSH server

    OPTS="-s /:SSH:172.16.25.125"

    # if you want to restrict access to shellinaboxd from localhost only

    OPTS="-s /:SSH:172.16.25.125 --localhost-only"

    启动Shellinabox

    配置完成后,您可以通过发出以下命令来启动服务。

    在Debian,Ubuntu和Linux Mint$ sudo service shellinaboxd start

    在RHEL和CentOS上# service shellinaboxd start

    在Fedora# systemctl enable shellinaboxd.service

    # systemctl start shellinaboxd.service

    验证Shellinabox

    现在让我们来验证是否Shellinabox在端口6175上运行使用“netstat的 ”命令。$ sudo netstat -nap | grep shellinabox

    or

    # netstat -nap | grep shellinaboxtcp 0 0 0.0.0.0:6175 0.0.0.0:* LISTEN 12274/shellinaboxd

    现在打开你的网页浏览器,然后导航到https://你的-IP-地址:6175。 你应该能看到一个基于网络的SSH终端 。 登录使用您的用户名和密码 ,你应该用你的shell提示符。

    c392be4203c3e425d129af4505561a93.png

    Shellinabox SSH登录

    e0b402190321be9cd8c231c09a6a8a36.png

    Shellinabox SSH Shell

    f5ccc7a7c8136f6975f5e069be8af8ae.png

    Shellinabox SSH注销

    您可以右键点击使用多种功能和操作,包括更改你的shell的外观和感觉。

    2dfdd33a7c9f20e6306c1f50635557e5.png

    Shellinabox更多选项

    请确保您保护您shellinabox 防火墙开放的端口6175为特定的IP地址来远程访问你的Linux外壳。

    参考链接

    展开全文
  • 基于WebSSH终端调研

    2020-08-13 20:49:22
    Web-based SSH使得通过浏览器就可以访问SSH Shell终端,通俗来将,使用浏览器代替Xshell之类的客户端工具。有两种实现方式: JavaScript/Ajax或者JavaScript/WebSockets。 基于Web的客户端通常分成两个两个部分: ...

    Web-based SSH使得通过浏览器就可以访问SSH Shell终端,通俗来将,使用浏览器代替Xshell之类的客户端工具。有两种实现方式:
    JavaScript/Ajax或者JavaScript/WebSockets。

    基于Web的客户端通常分成两个两个部分:

    客户端: JS和动态HTML用于捕获键盘事件,与服务器交换信息。
    服务端: 前端请求在web后端处理,键盘事件转发到安全shell客户端与连接的SSH服务器(运行sshd的远程主机)交互。终端输出直接转给客户端(客户端使用JavaScript转换成HTML,比如: vt100.js),或者处理成HTML直接返给前端。

    web tty

    yum update && yum install epel-release git
    git clone https://github.com/butlerx/wetty.git
    cd wetty
    npm install
    wget https://nodejs.org/dist/v12.18.3/node-v12.18.3-linux-x64.tar.xz
    yum install gcc-c++
    # npm 换源参考https://www.jianshu.com/p/4aaf929bfa71
    npm install -g yarn
    yarn global add wetty
    wetty --sshhost 192.168.10.3 --port 8080
    

    访问:http://192.168.10.3:8080/wetty

    在这里插入图片描述

    展开全文
  • 基于goapp+xterm实现webssh-网页上的SSH终端。 开源地址见文末。 特性 在网页上实现一个SSH终端。从而无需Xshell之类的模拟终端工具进行SSH连接。 可以对交互命令进行审计、记录 在页面上按一个键,就能打开一...

     简析

    基于goapp+xterm实现webssh-网页上的SSH终端。

    开源地址见文末。

    特性

    在网页上实现一个SSH终端。从而无需Xshell之类的模拟终端工具进行SSH连接。

    可以对交互命令进行审计、记录

    在页面上按一个键,就能打开一个webssh,并且自动登录 ,方便地管理各个服务器

    可以集成到自有的后台管理体系中

    下载并运行

    获取代码

    go get -v github.com/it234/gowebssh

    运行

    运行服务端:cd cmd/manageweb,go run main.go,运行成功后打开 127.0.0.1:8080。

    调试/运行web:cd website/manageweb,npm install,npm run dev。

    配置文件在(cmd/manageweb/config.yaml)中,用户默认为:admin/123456。

    温馨提醒

    默认配置采用的是 sqlite 数据库,数据库文件(自动生成)在cmd/manageweb/data/goapp.db。如果想切换为mysql或postgres,请更改配置文件,并创建数据库(表会自动创建)。 日志的配置为标准输出并写入文件。

    项目结构概览

    ├── cmd 项目的主要应用

    ├── internal 私有应用程序和库代码

    ├── pkg 外部应用程序可以使用的库代码

    ├── vendor 项目依赖的其他第三方库

     界面

    未完待续部分

    • 证书登录
    • 前端优化
    • 端面客户端
    • SSH命令审核
    • 其他

    感谢以下框架的开源支持

    • [xterm.js] - github.com/xtermjs/xterm.js

    开源地址https://github.com/it234/gowebssh

    展开全文
  • WebSSH2 使用ssh2,socket.io,xterm.js和express的Web SSH客户端 基于HTML5的基于Web的终端仿真器和SSH客户端的基本示例。 我们使用SSH2作为主机上的客户端,以将Websocket / Socket.io连接代理到SSH2服务器。 ...
  • 1.模拟web终端,技术:xterm 2.实现远程主机连接,建立ssh通道,python库:paramiko 3.实现web远程连接必须需要实时保持前后端通信,使用技术:websocket 技术流程图(画的有点潦草哈,因为懒哈哈): 其中 ssh....
  • 点击蓝字关注这个神奇的公众号~ttyd 是一个简单的命令行工具,用于在 Web 上共享终端,简单点说就是可以实现在网页上使用SSH终端服务,并且该软件是免费开源的。安装ttydttyd作者...
  • 基于goapp+xterm实现webssh-网页上的SSH终端,linux管理工具。 开源地址见文末。 特性 在网页上实现一个SSH终端。从而无需Xshell之类的模拟终端工具进行SSH连接。 可以对交互命令进行审计、记录 在页面上按一个键,...
  • [GitHub版本](https://badge.fury.io/gh/billchurch/webssh2.svg)](https: //badge.fury.io/gh/billchurch/webssh2)使用ssh2,socket.io,xterm.js并表示HTML5的基于Web的终端仿真器和SSH客户端的基本示例的Web ...
  • xterm.js : 前端模拟 shell 终端的一个库,当用户每输入一个键,就向后端发送该数据 paramiko : Python 下对 ssh2 封装的一个库,可以使用他来远程连接主机 用户首先通过网页上的WebSocket连接到后端,后端再通过...
  • Gateway WebSSH

    2021-02-27 17:48:42
    webssh通常是指可以在web浏览器上实现的类似于xshell之类的ssh终端,把ssh终端的功能搬到web上来实现 特征 支持SSH密码验证,包括空密码。 支持SSH公钥认证,包括DSA RSA ECDSA Ed25519密钥。 支持加密密钥。 ...
  • 网页版终端webssh2配置

    2019-02-21 14:38:33
    开源项目webssh2可以实现浏览器访问终端,参照网上教程实践后,记录步骤如下:安装NVMcurl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash source ~/.bashrc安装稳定版node.jsnvm...
  • 简析基于goapp+xterm实现webssh-网页上的SSH终端,linux管理工具。开源地址见文末。特性在网页上实现一个SSH终端。从而无需Xshell之类的模拟终端工具进行SSH连接。可以对交互命令进行审计、记录在页面上按一个键,就...
  • vue-webssh 一个基于vue,xtermjs,tornado,paramiko的web终端 机器环境 win10 python3.6 安装 pip install -r requirement.txt 启动 配置server.py里的服务器信息 python serever.py cd webssh npm ...
  • Web终端SSH功能

    2018-03-17 17:43:00
    http://www.laozuo.org/10703.html------ CentOS安装配置GateOne实现Web终端SSH功能 转载于:https://www.cnblogs.com/SZLLQ2000/p/8591494.html
  • 背景 现在几乎所有东西都向往着自动化,因为自动化让人舒服呀因为...1.模拟web终端,技术:xterm 2.实现远程主机连接,建立ssh通道,python库:paramiko 3.实现web远程连接必须需要实时保持前后端通信,使用技术:we...
  • 继续补充一个web远程ssh终端录像回放功能。 一、思路 网上找了一下大家实现webssh录像回放的方案,度娘搜的文章统一都是—用asciinema!仔细看了相关技术文档之后确实阿!我一开始以为需要视频文件。没想到,...
  • 但这些种种的目的,都离不开非常细小的技术支持,下面我们就来讨论如何搭建一个自动化运维平台,本文先讲一讲运维平台较重要的技术之一的webssh。 一、技术选型&实现思路 1.后端逻辑,选用:Django框架 2.模拟...
  • webssh 一款基于vue+egg的web终端管理器,可实现基本Linux服务器常规操作。 演示环境 演示地址: 演示账号: admin/admin * 请不要随意修改账号密码 环境 Vue 2.6.11 Ant Design Vue 1.6.4+ Node 12.16 Egg 2.27 ...
  • docker-webssh 在Docker中运行Webssh 不知道吗我很确定这个项目不是您想要的。 只是跳过它。 老实说,我也在研究它,虽然不能说太多,但确实是您想要的一个很酷的工具。 不要犹豫,尝试一下! 一个简单的Web SSH...
  • 开源web终端ssh解决方案

    千次阅读 2016-09-30 15:24:23
    等众多的 ssh 终端,为嘛还要弄个 webssh ,不是够二的吗?难道是为了装像么? 有个 webssh ,的确没有多大作用,的确无法代替 ssh 客户端,但是你想过没有,类似于 xshell , secureRT , p
  • WebSSH2 界面ssh

    2019-09-30 02:37:02
    通过浏览器:http://WebSSH服务器IP:WebSSH端口/ssh/host/任意可ping通终端IP 开始部署 安装 NVM curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.8/install.sh | bash source ~/.ba...
  • SSH远程终端 WebConsole ,基于Golang、WebSocket、TermJS的SSH远程终端,希望能帮到大家。 主要应用到隔...
  • web ssh

    千次阅读 2017-09-11 14:51:00
    前言: 好久都没来写博客,最近忙啥去了呢? 一是忙于saltstack的二次开发,二是...有人是说,有xshell,secureRT,putty等众多的ssh终端,为嘛还要弄个web的ssh,不是够二的吗?能起多大作用? 有个web

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 25,123
精华内容 10,049
关键字:

web的ssh终端网站