ttyd 是一个运行在服务端,客户端通过web浏览器访问从而连接后台 tty (pts伪终端)接口的程序,把 shell 终端搬到 web 浏览器中。
websocket 是 html5 开始提供的一种基于http协议与服务器webserver进行单会话、长连接、全双工的网络技术,依靠这种技术可以实现客户端和服务端的长连接,双向实时通信,以及基于服务端主动向客户端的实时消息推送交互的底层技术栈。
它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息, 是真正的双向平等对话,属于服务器推送技术的一种。
其他特点包括:
建立在 tcp 协议之上,服务器端的实现比较容易。
与 http 协议有着良好的兼容性。默认端口也是 80 和 443,并且握手阶段采用 http 协议,因此握手时不容易屏蔽,能通过各种 http 代理服务器。
数据格式比较轻量,性能开销小,通信高效。
可以发送文本,也可以发送二进制数据。
没有同源限制,客户端可以与任意服务器通信。
ttyd 不同于 shellinabox 项目的底层原理,它使用基于html5的 <code>websocket</code> 协议,更少的http交互带来更高效、更高性能、更低延时的交互式会话服务。
ttyd 也可以通过 <code>nginx</code> 7层http代理访问,更高的灵活性。
ttyd 内建支持 <code>ssl/tls</code> 传输层认证加密,支持客户端/服务端的单向/双向证书认证加密,更高的安全性。
方式一:下载二进制程序文件,本地直接运行即可(推荐)
方式二:下载源码文件,安装依赖库编译安装
如果安装<code>libwebsockets-dev</code>(版本过时)失败,你可能需要单独编译安装<code>libwebsockets</code>。
####程序帮助信息:
运行系统账户登录认证
注意:如需<code>root</code>身份登录终端,需要在属主属组为 root 的 <code>/etc/securetty</code>文件中增加可登录的终端类型<code>pts/0 pts/1 pts/2</code>,当然也需要运行 <code>ttyd</code> 程序的用户有可读 <code>/etc/securetty</code> 文件的权限(当然也就是以 root 身份启动 <code>ttyd</code> 服务)。 所以,为安全性考虑,不建议以 root 身份启动 <code>ttyd</code> 服务,也就不建议直接以 root 账户登录 ttyd websockets页面伪终端。
运行特定的后台交互式服务
通过 zmodem 上传下载文件,服务端需安装 <code>lrzsz</code>
本例使用本地自签证书示例
服务端单向认证
客户端/服务端双向认证,需增加<code>--ssl-ca</code>选项,桌面浏览器另外需要单独安装 <code>client.p12</code>证书到本地
在 curl 中测试证书验证
如需把服务挂靠在 nginx 后端,请配置增加如下 ws 参数: