Ssh管理工具-tssh


tssh是一款用Go语言开发的SSH管理工具端,支持记住密码与文件传输工具,支持批量登录,批量执行指定的命令,可跨平台使用。采用MIT协议授权。
它支持选择或搜索 ~/.ssh/config 中配置的服务器,支持 vim 操作习惯,解决 ssh 终端的服务器管理问题。支持一次选择多台服务器,批量登录,并支持批量执行预先指定的命令,方便快速完成批量服务器操作。支持配置服务器登录密码,解决每次手工输入密码的麻烦(在自己能控制的服务器,推荐使用公私钥登录)。
tssh 内置支持 trzsz (trz/tsz) 文件传输工具,一并解决了 Windows 中使用 trzsz ssh 上传速度很慢的问题。
使用方法
~/ 代表 HOME 目录。在 Windows 中,请将下文的 ~/ 替换成 C:\Users\your_name\。
在客户端生成密钥对,一般存放在 ~/.ssh/ 下:
ssh-keygen -t rsa -b 4096 生成 RSA 的,私钥 ~/.ssh/id_rsa,公钥 ~/.ssh/id_rsa.pub。
登录服务器,将公钥(即前面生成密钥对时 .pub 后缀的文件内容)追加写入服务器上的 ~/.ssh/authorized_keys 文件中。
一行代表一个客户端的公钥,注意 ~/.ssh/authorized_keys 要设置正确的权限:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
在客户端配置好 ~/.ssh/config 文件,举例:
Host alias1
HostName 192.168.0.1
Port 22
User your_name
Host alias2
HostName 192.168.0.2
Port 22
User your_name
使用 tssh 命令登录服务器,tssh alias1 命令登录在 ~/.ssh/config 中 alias1 对应的服务器。直接执行 tssh 命令(不带参数),可以选择(搜索) ~/.ssh/config 中配置好的服务器并登录。
批量登录
目前支持在 tmux 和 Windows Terminal 中一次选择多台服务器,批量登录,并支持批量执行预先指定的命令。按下 Space、Ctrl+Space 或 Alt+Space 可以选中或取消当前服务器,若不能选中说明还不支持当前终端,请先运行 tmux。按下 Enter 或 Ctrl+P 会以分屏的方式批量登录,Ctrl+W 会打开新窗口批量登录,Ctrl+T 会打开新 tab 批量登录。
tssh 不带参数启动可以批量登录服务器,若带 -o RemoteCommand 参数启动则可以批量执行指定的命令。支持执行指定命令之后进入交互式 shell,但 Windows Terminal 不支持分号 ;,可以用 |cat&& 代替。举例:
tssh -t -o RemoteCommand='ping -c3 trzsz.github.io ; bash'
tssh -t -o RemoteCommand="ping -c3 trzsz.github.io |cat&& bash"
记住密码
为了兼容标准 ssh ,密码配置项独立放在 ~/.ssh/password 中,其他配置项依然放在 ~/.ssh/config 中。推荐使用前面密钥认证的方式,密码的安全性弱一些。如果必须要用,建议设置好 ~/.ssh/password 的权限:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/password
下面 ~/.ssh/password 配置 test2 的密码是 123456,其他以 test 开头的密码是 111111:
Host test2
Password 123456
# ~/.ssh/config 和 ~/.ssh/password 是支持通配符的,tssh 会使用第一个匹配到的值。
# 这里希望 test2 使用区别于其他 test* 的密码,所以将 test* 放在了 test2 的后面。
Host test*
Password 111111
记住答案
除了私钥和密码,还有一种登录方式,英文叫 keyboard interactive ,是服务器返回一些问题,客户端提供正确的答案就能登录,很多自定义的一次性密码就是利用这种方式实现的。如果答案是固定不变的,tssh 支持 “记住答案”,也是在 ~/.ssh/password 中进行配置。大部分都是只有一个问题,只要配置 QuestionAnswer1 即可。对于有多个问题的,每个问题答案可按序号进行配置,也可以按问题的 hex 编码进行配置。使用 tssh --debug 登录,会输出问题的 hex 编码,从而知道该如何使用 hex 编码进行配置。配置举例:
Host test1
QuestionAnswer1 答案一
Host test2
QuestionAnswer1 答案一
QuestionAnswer2 答案二
QuestionAnswer3 答案三
Host test3
6e616d653a20 my_name # 其中 `6e616d653a20` 是问题 `name: ` 的 hex 编码
636f64653a20 my_code # 其中 `636f64653a20` 是问题 `code: ` 的 hex 编码
另有基于 UDP 的 ssh - tsshd
优点简介
降低延迟( 基于 QUIC / KCP )
端口转发( 与 openssh 相同,包括 ssh agent 转发和 X11 转发 )
连接迁移( 支持网络切换和掉线重连,依赖于 quic-go#234 )
如何使用
在客户端(本地电脑)上安装 tssh。
在服务端(远程机器)上安装 tsshd。
使用 tssh --udp 登录服务器。如下配置可省略 --udp 参数:
Host xxx
#!! UdpMode yes
#!! UdpPort 61000-62000
#!! TsshdPath ~/go/bin/tsshd
原理简介
tssh 在客户端扮演 ssh 的角色,tsshd 在服务端扮演 sshd 的角色。
tssh 会先作为一个 ssh 客户端正常登录到服务器上,然后在服务器上启动一个新的 tsshd 进程。tsshd 进程会随机侦听一个 61000 到 62000 之间的 UDP 端口(可通过 UdpPort 配置自定义),并将其端口和密钥通过 ssh 通道发回给 tssh 进程。登录的 ssh 连接会被关闭,然后 tssh 进程通过 UDP 与 tsshd 进程通讯。
tsshd 支持 QUIC 和 KCP 协议(默认为前者),可以命令行指定(如 -oUdpMode=KCP),或如下配置:
Host xxx
#!! UdpMode KCP
2024年8月下旬发布 v0.1.3,支持自定义端口。
最新版本:0.18
于2023年7月发布,目前支持在 tmux 和 Windows Terminal 中一次选择多台服务器,批量登录,并支持批量执行预先指定的命令。按下 Space、Ctrl+Space 或 Alt+Space 可以选中或取消当前服务器,若不能选中说明还不支持当前终端,请先运行 tmux。按下 Enter 或 Ctrl+P 会以分屏的方式批量登录,Ctrl+W 会打开新窗口批量登录,Ctrl+T 会打开新 tab 批量登录。
tssh 不带参数启动可以批量登录服务器,若带 -o RemoteCommand 参数启动则可以批量执行指定的命令。支持执行指定命令之后进入交互式 shell,但 Windows Terminal 不支持分号 ;,可以用 |cat&& 代替。举例:
tssh -t -o RemoteCommand='ping -c3 trzsz.github.io ; bash'
tssh -t -o RemoteCommand="ping -c3 trzsz.github.io |cat&& bash"
项目主页:https://github.com/trzsz/trzsz-ssh
它支持选择或搜索 ~/.ssh/config 中配置的服务器,支持 vim 操作习惯,解决 ssh 终端的服务器管理问题。支持一次选择多台服务器,批量登录,并支持批量执行预先指定的命令,方便快速完成批量服务器操作。支持配置服务器登录密码,解决每次手工输入密码的麻烦(在自己能控制的服务器,推荐使用公私钥登录)。
tssh 内置支持 trzsz (trz/tsz) 文件传输工具,一并解决了 Windows 中使用 trzsz ssh 上传速度很慢的问题。
使用方法
~/ 代表 HOME 目录。在 Windows 中,请将下文的 ~/ 替换成 C:\Users\your_name\。
在客户端生成密钥对,一般存放在 ~/.ssh/ 下:
ssh-keygen -t rsa -b 4096 生成 RSA 的,私钥 ~/.ssh/id_rsa,公钥 ~/.ssh/id_rsa.pub。
登录服务器,将公钥(即前面生成密钥对时 .pub 后缀的文件内容)追加写入服务器上的 ~/.ssh/authorized_keys 文件中。
一行代表一个客户端的公钥,注意 ~/.ssh/authorized_keys 要设置正确的权限:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys
在客户端配置好 ~/.ssh/config 文件,举例:
Host alias1
HostName 192.168.0.1
Port 22
User your_name
Host alias2
HostName 192.168.0.2
Port 22
User your_name
使用 tssh 命令登录服务器,tssh alias1 命令登录在 ~/.ssh/config 中 alias1 对应的服务器。直接执行 tssh 命令(不带参数),可以选择(搜索) ~/.ssh/config 中配置好的服务器并登录。
批量登录
目前支持在 tmux 和 Windows Terminal 中一次选择多台服务器,批量登录,并支持批量执行预先指定的命令。按下 Space、Ctrl+Space 或 Alt+Space 可以选中或取消当前服务器,若不能选中说明还不支持当前终端,请先运行 tmux。按下 Enter 或 Ctrl+P 会以分屏的方式批量登录,Ctrl+W 会打开新窗口批量登录,Ctrl+T 会打开新 tab 批量登录。
tssh 不带参数启动可以批量登录服务器,若带 -o RemoteCommand 参数启动则可以批量执行指定的命令。支持执行指定命令之后进入交互式 shell,但 Windows Terminal 不支持分号 ;,可以用 |cat&& 代替。举例:
tssh -t -o RemoteCommand='ping -c3 trzsz.github.io ; bash'
tssh -t -o RemoteCommand="ping -c3 trzsz.github.io |cat&& bash"
记住密码
为了兼容标准 ssh ,密码配置项独立放在 ~/.ssh/password 中,其他配置项依然放在 ~/.ssh/config 中。推荐使用前面密钥认证的方式,密码的安全性弱一些。如果必须要用,建议设置好 ~/.ssh/password 的权限:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/password
下面 ~/.ssh/password 配置 test2 的密码是 123456,其他以 test 开头的密码是 111111:
Host test2
Password 123456
# ~/.ssh/config 和 ~/.ssh/password 是支持通配符的,tssh 会使用第一个匹配到的值。
# 这里希望 test2 使用区别于其他 test* 的密码,所以将 test* 放在了 test2 的后面。
Host test*
Password 111111
记住答案
除了私钥和密码,还有一种登录方式,英文叫 keyboard interactive ,是服务器返回一些问题,客户端提供正确的答案就能登录,很多自定义的一次性密码就是利用这种方式实现的。如果答案是固定不变的,tssh 支持 “记住答案”,也是在 ~/.ssh/password 中进行配置。大部分都是只有一个问题,只要配置 QuestionAnswer1 即可。对于有多个问题的,每个问题答案可按序号进行配置,也可以按问题的 hex 编码进行配置。使用 tssh --debug 登录,会输出问题的 hex 编码,从而知道该如何使用 hex 编码进行配置。配置举例:
Host test1
QuestionAnswer1 答案一
Host test2
QuestionAnswer1 答案一
QuestionAnswer2 答案二
QuestionAnswer3 答案三
Host test3
6e616d653a20 my_name # 其中 `6e616d653a20` 是问题 `name: ` 的 hex 编码
636f64653a20 my_code # 其中 `636f64653a20` 是问题 `code: ` 的 hex 编码
另有基于 UDP 的 ssh - tsshd
优点简介
降低延迟( 基于 QUIC / KCP )
端口转发( 与 openssh 相同,包括 ssh agent 转发和 X11 转发 )
连接迁移( 支持网络切换和掉线重连,依赖于 quic-go#234 )
如何使用
在客户端(本地电脑)上安装 tssh。
在服务端(远程机器)上安装 tsshd。
使用 tssh --udp 登录服务器。如下配置可省略 --udp 参数:
Host xxx
#!! UdpMode yes
#!! UdpPort 61000-62000
#!! TsshdPath ~/go/bin/tsshd
原理简介
tssh 在客户端扮演 ssh 的角色,tsshd 在服务端扮演 sshd 的角色。
tssh 会先作为一个 ssh 客户端正常登录到服务器上,然后在服务器上启动一个新的 tsshd 进程。tsshd 进程会随机侦听一个 61000 到 62000 之间的 UDP 端口(可通过 UdpPort 配置自定义),并将其端口和密钥通过 ssh 通道发回给 tssh 进程。登录的 ssh 连接会被关闭,然后 tssh 进程通过 UDP 与 tsshd 进程通讯。
tsshd 支持 QUIC 和 KCP 协议(默认为前者),可以命令行指定(如 -oUdpMode=KCP),或如下配置:
Host xxx
#!! UdpMode KCP
2024年8月下旬发布 v0.1.3,支持自定义端口。
最新版本:0.18
于2023年7月发布,目前支持在 tmux 和 Windows Terminal 中一次选择多台服务器,批量登录,并支持批量执行预先指定的命令。按下 Space、Ctrl+Space 或 Alt+Space 可以选中或取消当前服务器,若不能选中说明还不支持当前终端,请先运行 tmux。按下 Enter 或 Ctrl+P 会以分屏的方式批量登录,Ctrl+W 会打开新窗口批量登录,Ctrl+T 会打开新 tab 批量登录。
tssh 不带参数启动可以批量登录服务器,若带 -o RemoteCommand 参数启动则可以批量执行指定的命令。支持执行指定命令之后进入交互式 shell,但 Windows Terminal 不支持分号 ;,可以用 |cat&& 代替。举例:
tssh -t -o RemoteCommand='ping -c3 trzsz.github.io ; bash'
tssh -t -o RemoteCommand="ping -c3 trzsz.github.io |cat&& bash"
项目主页:https://github.com/trzsz/trzsz-ssh