magnusjt/socketty

基于Web Sockets的SSH终端

安装: 73

依赖项: 0

建议者: 0

安全: 0

星星: 7

关注者: 4

分支: 1

开放性问题: 0

语言:JavaScript

类型:项目

1.0.0 2015-08-24 06:47 UTC

This package is not auto-updated.

Last update: 2024-09-28 17:49:19 UTC


README

基于Web Sockets的交互式终端,后端为PHP。例如,可以用来创建交互式SSH会话,但也应适用于任何命令。同时,可以使用现有的PHP后端来执行授权和认证。

使用以下技术

  • ratchet - PHP中的Web Sockets
  • reactphp - PHP中的异步IO通过事件循环
  • term.js - 浏览器中的终端仿真
  • reactjs - 用于UI的其余部分
  • python的pty模块 - 用于仿真pty,php可以通过正常管道与之交互

alt tag

用法

该项目由一个管理客户端连接的PHP后端和一个仿真终端的前端组成。为了运行后端服务器,创建对此项目的composer依赖项,并遵循./server.php中的示例。

composer require magnusjt/socketty

在此处可以进行自定义

  • 认证 - 实现AuthenticatorInterface。如果您想从现有网站重用会话,您需要通过memcached来完成此操作。
  • 授权 - 与认证相同,但在此情况下,您还可以授权命令和命令参数。
  • 用于Web Sockets的端口
  • 允许的主机
  • 日志记录 - 项目使用psr LoggerInterface,所以任何东西都行(Monolog是一个不错的选择)
  • 生成器 - 生成要执行的命令字符串。可以在此处启用和禁用命令。

后端示例:参见./server.php

前端:通过将以下内容添加到npm依赖项中安装:"socketty": "git://github.com/magnusjt/socketty.git#master"

前端示例(需要使用browserify和babelify编译)

var Socketty = require('socketty');
var domNodeId = 'app'; // ID of the dom node to open the app in
var wssUrl = 'wss://:5678'; // Websocket URL

// Create some presets
var opts = [
    {
        name: 'SSH',
        open: true,
        list: [
            {cmd: 'ssh vagrant@127.0.0.1', 'name': 'Vagrant SSH'},
        ]
    },
    {
        name: 'Ping',
        open: false,
        list: [
            {cmd: 'ping 127.0.0.1', 'name': 'Ping localhost'},
        ]
    }
];

Socketty.start(domNodeId, wssUrl, opts);

开发

  • 使用npm install安装前端依赖项。
  • 使用composer install安装后端依赖项。
  • 复制并重命名Vagrantfile和vagrant_bootstrap.sh文件
  • 使用vagrant up启动虚拟服务器
  • 使用php server.php启动Web Sockets服务器
  • 在浏览器中打开https://:5678/login.php以模拟登录
  • 在浏览器中打开https://:5678并在虚拟服务器中生成一些终端
  • 使用gulp buildgulp watchify构建前端内容
  • 注意:重新启动后可能需要手动启动apache和haproxy
service httpd start
/usr/local/sbin/haproxy -f /vagrant/haproxy.cfg -p /var/run/haproxy.pid -D

关于SSL

为了具有安全的Web Sockets,vagrant安装包括haproxy,该程序终止所有SSL请求。

工作原理

首先,reactphp与事件循环一起使用,以实现PHP的异步调用。reactphp的一个子组件child-processes使用PHP的proc_open连接到子进程及其管道。对于需要tty的程序(如ssh及其交互式密码提示),我们真的很想使用PHP的pty管道,但遗憾的是,这些管道在大多数系统上不可用。为了解决这个问题,所有命令都通过一个Python脚本打开,该脚本使用pty模块来模拟pty。