trzsz / trzsz-ssh

trzsz-ssh ( tssh ) is an ssh client designed as a drop-in replacement for the openssh client. It aims to provide complete compatibility with openssh, mirroring all its features, while also offering additional useful features. Such as login prompt, batch login, remember password, automated interaction, trzsz, zmodem(rz/sz), udp mode like mosh, etc.
https://trzsz.github.io/ssh
MIT License
1.76k stars 103 forks source link

自动安装trzsz #34

Closed BrightXiaoHan closed 11 months ago

BrightXiaoHan commented 1 year ago

能否像vscode那样链接服务器后自动安装vscode-server那样,tssh登录到服务器上后,自动安装trzsz?

BrightXiaoHan commented 1 year ago

更进一步,对于服务器不能联网的情况,能否支持在PC机上自动下载好二进制包,上传并安装在远程服务器上?

lonnywong commented 1 year ago

@BrightXiaoHan 现在的痛点是服务器不能连外网,还是境外的网速很慢?或者是服务器很多,要安装比较麻烦?

看能不能自己在 PC 机写个脚本来解决?你的 PC 是 Windows 还是 Mac ?

以 Mac 和 Linux 为例,脚本可以这样写:

# 在服务器创建一个目录,并将此目录加到 PATH 环境变量中
tssh server_alias_or_ip 'mkdir -p ~/.local/bin && echo "export PATH=\$PATH:\$HOME/.local/bin" >> ~/.bash_profile'

# 下载适用的最版本版本 trzsz
wget https://github.com/trzsz/trzsz-go/releases/download/v1.1.4/trzsz_1.1.4_linux_x86_64.tar.gz

# 解压并复制到选程服务器
tar zxvf trzsz_*_linux_x86_64.tar.gz && scp trzsz_*_linux_x86_64/t?z @server_alias_or_ip:~/.local/bin
BrightXiaoHan commented 1 year ago

感觉主要是,服务器很多,要安装比较麻烦。我的PC是windows。

lonnywong commented 1 year ago

如果你的服务器能连外网的话,会很好解决。服务器是什么操作系统?如果是同一种类型就更好办了。

lonnywong commented 1 year ago

以 CentOS 为例,可以这样:

tssh -t -o RemoteCommand='( sudo rpm -ivh --force https://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm && sudo yum install -y tssh ) || bash'

Windows Terminal 中执行这个命令之后,可以按空格键选中服务器,然后 Ctrl + T 就会打开新 tab 并执行安装 trzsz 的命令,安装成功的自动退出,安装失败的进入交互式 shell。

以上命令我没测试过,可能需要先选中一两台测试一下。

lonnywong commented 1 year ago

@BrightXiaoHan 新版本 v0.1.9 增强了批量选择的功能,更方便了。在 Windows Terminal 中,先定义好安装的命令,如:

tssh -t -o RemoteCommand='( sudo apt -y install software-properties-common && sudo add-apt-repository -y ppa:trzsz/ppa && sudo apt update && sudo apt -y install trzsz  ) || bash'

回车执行之后,会进入服务器选择界面,按 A( 不区分大小写 )可以全选当前页的服务器,按 L ( 不区分大小写 )可以翻到下一页,选择完成后按 T( 不区分大小写 )就会自动打开新 tab 并批量登录选中的服务器,然后自动执行 RemoteCommand 指定的命令( 上面是在 ubuntu 中安装 trzsz )。

更多选择服务器的快捷键可参考:README 快捷键

lonnywong commented 11 months ago

@BrightXiaoHan 现在还有这个诉求吗?我有一些想法,可能会在将来实现,但不一定会兼容所有操作系统。有需要可加 README 那个 QQ 群,也可以加群主我私聊。

BrightXiaoHan commented 11 months ago

有的,现在连一个新服务器都要先登录上去安装,有时没有root权限的话又只能直接下载二进制包,加入PATH环境变量。

lonnywong commented 11 months ago

@BrightXiaoHan 没有 root ,有 sudo 权限吗?也没有的话,你会安装到哪?~/.local/bin/?加入 PATH 环境变量,你用的是 bash ,还是 zsh,或者其他?是改 ~/.bashrc 还是其他?

BrightXiaoHan commented 11 months ago

fish,一般装到~/.local/bin/ 这里

lonnywong commented 11 months ago

@BrightXiaoHan 是否只要在本地自动下载 trzsz 的程序,并上传到 ~/.local/bin/ 目录下就能满足需求了?

是否有自动将 ~/.local/bin/ 目录加到 PATH 中的需求?有很多种 shell,每种 shell 又有好几个配置,要全部兼容挺复杂的。

在内地从 GitHub 下载 trzsz 程序,可能会经常抽疯,导致很不稳定的结果,需要一并支持指定本地下载好的文件?

BrightXiaoHan commented 11 months ago

@BrightXiaoHan 是否只要在本地自动下载 trzsz 的程序,并上传到 ~/.local/bin/ 目录下就能满足需求了?

是否有自动将 ~/.local/bin/ 目录加到 PATH 中的需求?有很多种 shell,每种 shell 又有好几个配置,要全部兼容挺复杂的。

在内地从 GitHub 下载 trzsz 程序,可能会经常抽疯,导致很不稳定的结果,需要一并支持指定本地下载好的文件?

对我个人需求就是在本地自动下载 trzsz 的程序,并上传到 ~/.local/bin/ 目录下就能满足需求。本地我可以开vpn啥的

lonnywong commented 11 months ago

OK,看来还是分步实现会简单一些,自动将 ~/.local/bin/ 加到 PATH 的功能以后再说。

lonnywong commented 11 months ago

@BrightXiaoHan 已支持。

可以 tssh --install-trzsz 这样运行,然后就按空格 选择多台服务器进行安装,快捷键参考 README

也可以指定在某台服务器上安装 tssh --install-trzsz xxx_server

会自动从 GitHub 上获取 trzsz 最新的版本,然后下载适当的二进制,并上传到 ~/.local/bin/ 目录中。

如果获取 trzsz 版本号失败,可以手工指定,如 tssh --install-trzsz --trzsz-version 1.1.6

如果下载 trzsz 二进制失败,也可以手工指定,如 tssh --install-trzsz --trzsz-bin-path /path/to/xxx.tar.gz

v0.1.15 发布前,可以这样安装 go install github.com/trzsz/trzsz-ssh/cmd/tssh@main ,安装的路径在 ~/go/bin/

fangzhengjin commented 11 months ago

@BrightXiaoHan 已支持。

可以 tssh --install-trzsz 这样运行,然后就按空格 选择多台服务器进行安装,快捷键参考 README

也可以指定在某台服务器上安装 tssh --install-trzsz xxx_server

会自动从 GitHub 上获取 trzsz 最新的版本,然后下载适当的二进制,并上传到 ~/.local/bin/ 目录中。

如果获取 trzsz 版本号失败,可以手工指定,如 tssh --install-trzsz --trzsz-version 1.1.6

如果下载 trzsz 二进制失败,也可以手工指定,如 tssh --install-trzsz --trzsz-bin-path /path/to/xxx.tar.gz

v0.1.15 发布前,可以这样安装 go install github.com/trzsz/trzsz-ssh/cmd/tssh@main ,安装的路径在 ~/go/bin/

@lonnywong 提个建议,上传到服务器的目录应该可以在配置文件里设置,因为不同的发行版默认的 PATH 中包含的目录不完全一样,尤其是使用的用户可能不是 root,但是可以通过 sudo -i 切换到 root,~/.local/bin/这个固定目录就不是很合适了

lonnywong commented 11 months ago

提个建议,上传到服务器的目录应该可以在配置文件里设置,因为不同的发行版默认的 PATH 中包含的目录不完全一样,尤其是使用的用户可能不是 root,但是可以通过 sudo -i 切换到 root,~/.local/bin/这个固定目录就不是很合适了

需要当前登录的用户有写权限的目录才可以,你不是以 root 登录,是不能往 root 的目录传文件的。

BrightXiaoHan commented 11 months ago

提个建议,上传到服务器的目录应该可以在配置文件里设置,因为不同的发行版默认的 PATH 中包含的目录不完全一样,尤其是使用的用户可能不是 root,但是可以通过 sudo -i 切换到 root,~/.local/bin/这个固定目录就不是很合适了

需要当前登录的用户有写权限的目录才可以,你不是以 root 登录,是不能往 root 的目录传文件的。

感谢,我尝试一下。

fangzhengjin commented 11 months ago

提个建议,上传到服务器的目录应该可以在配置文件里设置,因为不同的发行版默认的 PATH 中包含的目录不完全一样,尤其是使用的用户可能不是 root,但是可以通过 sudo -i 切换到 root,~/.local/bin/这个固定目录就不是很合适了

需要当前登录的用户有写权限的目录才可以,你不是以 root 登录,是不能往 root 的目录传文件的。

我主要想表达的其实是, tssh --install-trzsz 安装trzsz的的路径, 应该是可配置的, ~/.local/bin/ 并不适用于所有人, 或许可以在命令后加一个可选参数 或 配置文件中设置地址 来覆盖默认位置

lonnywong commented 11 months ago

我主要想表达的其实是, tssh --install-trzsz 安装trzsz的的路径, 应该是可配置的, ~/.local/bin/ 并不适用于所有人, 或许可以在命令后加一个可选参数 或 配置文件中设置地址 来覆盖默认位置

等我有空了,加个 --install-path 参数吧。如果目标路径含有 ~/,那参数要加上单引号,如: --install-path '~/myinstallpath/'

lonnywong commented 11 months ago

@fangzhengjin 已支持 tssh --install-trzsz --install-path '/path/to/install'

v0.1.16 发布前,可以这样安装 go install github.com/trzsz/trzsz-ssh/cmd/tssh@main ,安装的路径在 ~/go/bin/