V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
LonnyWong
V2EX  ›  程序员

Go 实现的 ssh 客户端 trzsz-ssh ( tssh ) 新版本支持批量登录,并支持批量执行预先指定的命令。

  •  
  •   LonnyWong · 280 天前 · 1656 次点击
    这是一个创建于 280 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开源地址: https://github.com/trzsz/trzsz-ssh

    • 目前支持在 tmuxWindows Terminal 中一次选择多台服务器,批量登录,并支持批量执行预先指定的命令。

    • 按下 SpaceCtrl+SpaceAlt+Space 可以选中或取消当前服务器,若不能选中说明还不支持当前终端,请先运行 tmux

    • 按下 EnterCtrl+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"
      

    trzsz-ssh(tssh)批量执行演示

    28 条回复    2023-09-03 11:33:26 +08:00
    yhrzpm
        1
    yhrzpm  
       280 天前
    支持服务器分组吗
    LonnyWong
        2
    LonnyWong  
    OP
       280 天前
    @yhrzpm 现在还不支持分组。支持搜索,在 alias 命名上同一组有相同的前缀或后缀,就可以搜索出来选择。不过在搜索状态时,快捷键基本都要同时按下 Ctrl 键。
    ruanimal
        3
    ruanimal  
       280 天前
    熬夜搞啊
    ruanimal
        4
    ruanimal  
       280 天前
    @ruanimal 看错,忽略
    LonnyWong
        5
    LonnyWong  
    OP
       280 天前
    @ruanimal 其实也确实熬了不少夜。有些想法和代码,在脑子里不写出来的话,也很难受,会睡不着。
    skiy
        6
    skiy  
       280 天前
    本来想用的,但要改 ~/.ssh/config ,我就不想用了。可以自定义配置文件路径吗?

    我目前在用 sshmenu ( https://github.com/mmeyer724/sshmenu ),挺好用的,但不是二进制单文件,要依赖 python 环境,觉得不方便。
    LonnyWong
        7
    LonnyWong  
    OP
       280 天前
    @skiy 你可以在 ~/.ssh/config 的最前面,加一行 Include 另一个 config 文件,然后就可以在另一个 config 中配置了。
    huaxianyan
        8
    huaxianyan  
       263 天前
    我用了一段时间发现单靠 sshconfig 还是有一些局限性

    比如我还是需要有一定的对服务器的额外信息标记以及对部分配置的屏蔽,最简单的例子就是给 git 配置了代理方便 git 通过 ssh 来使用,但是在列表中显示就看着难受

    另外 tssh 在我这里的定位是对于不常用的机器会特别好用,这些机器已经配置了连接信息,但是因为不常用可能忘记了取的名字是啥,这时候用 tssh 打开列表就很好用

    最后还有点强迫症就是 sshconfig 里配置时平常 ssh xxx 肯定用的全小写,因为区分大小写首字母大写很难受,但是在 tssh 里列出来首字母不大写的时候也很难受,要是有额外的配置项就好了
    LonnyWong
        9
    LonnyWong  
    OP
       263 天前
    @huaxianyan

    1 、在 alias 后面加一个通配符 * 或 ? ,就不会在列表中显示了,只要不是刚好有其他 alias 的前缀等于它,就不会有什么影响。

    2 、首字母显示是小写,感觉还好吧?另外一个比较取巧的办法是,可以像下面这样配置( 要求没有其他 test 前缀的,要不可能会冲突 )。这样 tssh 显示的就是 Test ,不会显示 test?,然后 tssh test 也能正常登录。在 v0.1.10 发布前,最好先用 main 分支的版本 go install github.com/trzsz/trzsz-ssh/cmd/tssh@main ,在 v0.1.9 之前会不显示第二个 test? 的,即使没有通配符也不会显示,但是 v0.1.10 会修复这个问题,没有通配符就会显示出来。

    Host Test test?
    HostName 127.0.0.1
    huaxianyan
        10
    huaxianyan  
       262 天前
    @LonnyWong 用 * 有效,感谢!

    ? 也试过但是不生效,原因不知,不过有一个可以生效的就很好,这样我就可以在显示和使用上取得平衡了

    最后想请问一下列表上下选择时终端会出提示音,有没有可以开关的选项?
    LonnyWong
        11
    LonnyWong  
    OP
       262 天前
    @huaxianyan 提示音,我已经去掉了,看来你还在用比较旧的版本,升级到 v0.1.9 看看?

    tssh -V 可以看到当前版本。which tssh 可以看到使用哪个路径的 tssh ( 在 Windows 是 get-command tssh )。
    LonnyWong
        12
    LonnyWong  
    OP
       262 天前
    一开始不支持 ? 的,加上很久了,看来你在用的版本是很久以前的了。
    huaxianyan
        13
    huaxianyan  
       262 天前
    @LonnyWong
    更新了之后没有问题了,感谢

    顺便问一下 trzsz 的问题,我在服务端上安装了 go 版服务端,然后客户端使用 tssh 连接后使用命令来使用,这个理解应该是没问题吧?

    但是在敲了命令后会报错,提示以下内容
    ```
    ::TRZSZGO:TRANSFER:R:1.1.5:9163880153900
    exec: "zenity": executable file not found in $PATH
    goroutine 1 [running]:
    runtime/debug.Stack()
    /usr/lib/go-1.20/src/runtime/debug/stack.go:24 +0x65
    github.com/trzsz/trzsz-go/trzsz.newTrzszError({0xc0001d4000, 0x50}, {0xc0001d2000, 0x4}, 0x1)
    /build/trzsz-DlTGjQ/trzsz-1.1.5/trzsz/comm.go:232 +0x272
    github.com/trzsz/trzsz-go/trzsz.(*trzszTransfer).recvCheck(0x17f7811632fa8?, {0x59e270, 0x3}, 0x20?, 0x714534?)
    /build/trzsz-DlTGjQ/trzsz-1.1.5/trzsz/transfer.go:321 +0x152
    github.com/trzsz/trzsz-go/trzsz.(*trzszTransfer).recvString(0xc00000000f?, {0x59e270?, 0xc000059be0?}, 0xb3?, 0xc000059c30?)
    /build/trzsz-DlTGjQ/trzsz-1.1.5/trzsz/transfer.go:355 +0x1e
    github.com/trzsz/trzsz-go/trzsz.(*trzszTransfer).recvAction(0xc00015c000)
    /build/trzsz-DlTGjQ/trzsz-1.1.5/trzsz/transfer.go:478 +0x32
    github.com/trzsz/trzsz-go/trzsz.recvFiles(0xc00015c000?, 0xc00007e930, 0x2b?, 0x3?)
    /build/trzsz-DlTGjQ/trzsz-1.1.5/trzsz/trz.go:70 +0x47
    github.com/trzsz/trzsz-go/trzsz.TrzMain()
    /build/trzsz-DlTGjQ/trzsz-1.1.5/trzsz/trz.go:189 +0x9d6
    main.main()
    /build/trzsz-DlTGjQ/trzsz-1.1.5/cmd/trz/main.go:33 +0x19
    ```
    LonnyWong
        14
    LonnyWong  
    OP
       262 天前
    @huaxianyan 你这个报错应该是在服务器上运行了 trzsz 命令。

    服务器上一般只用 trz 和 tsz 这两个命令,客户端才有可能需要用 trzsz 这个命令,你用 tssh 了,那客户端也不需要 trzsz 这个命令了。

    如果你的客户端是 tssh 或者 trzsz ,也报了找不到 zenity ,那就是要手工安装一个 zenity ,如 yum install zenity 或 apt install zenity 等。
    huaxianyan
        15
    huaxianyan  
       262 天前
    @LonnyWong 在客户端安装了 zenity 后现在会提示
    ```
    ::TRZSZGO:TRANSFER:R:1.1.5:9164230543300
    Cancelled
    ```
    使用的环境是 Windows Terminal 配合 WSL1 ,服务端为 Ubuntu
    LonnyWong
        16
    LonnyWong  
    OP
       262 天前
    原来你是在 WSL 中使用 tssh 呀,那要在 Windows 中安装 tssh ,然后在 WSL 中使用 Windows 安装的 tssh.exe ,好像 .exe 还不能省略,应该也可以复制 tssh.exe 到 WSL 内使用。使用的配置不是 WSL 内的,你要复制到 C:\Users\xxx\.ssh\config 中。
    LonnyWong
        17
    LonnyWong  
    OP
       262 天前
    @huaxianyan 上面这个是否可以?
    huaxianyan
        18
    huaxianyan  
       261 天前
    @LonnyWong 我想应该是没问题的,本质上就是改用 Windows 的 SSH 来连了,这样我感觉不如给 Powershell 配置一套,直接从 PS 去连,省得从 WSL 里走一遍有点没必要

    没有及时回复抱歉,我现在遇到一个很奇怪的问题,Windows 本身的 SSH 连接的时候调用密钥路径拼接不对,正反斜杠都有导致用不了,一直在解决这个事情(虽然还没有解决
    huaxianyan
        19
    huaxianyan  
       261 天前
    @LonnyWong

    ```
    identity_sign: private key C:\\Users\\7inaWork-Windows/.ssh/id_rsa contents do not match public
    ```

    类似这样
    huaxianyan
        20
    huaxianyan  
       261 天前
    @huaxianyan 抱歉解决了,把 .ssh 目录下的公钥删除就好了,虽然我不知道为什么会影响
    huaxianyan
        21
    huaxianyan  
       261 天前
    @LonnyWong 通过 Windows 本身的 tssh 可以正常工作,没有问题
    LonnyWong
        22
    LonnyWong  
    OP
       261 天前
    @huaxianyan Windows Terminal 会比直接 PS 好用很多,可以试试。
    huaxianyan
        23
    huaxianyan  
       260 天前
    @LonnyWong 是 Windows Terminal 使用 PS ,之前是 WT 使用 WSL ,就是换了个 Shell
    LonnyWong
        24
    LonnyWong  
    OP
       244 天前
    @skiy v0.1.11 支持在 ~/.tssh.conf 中自定义配置路径了。
    ConfigPath = /path/to/config

    https://github.com/trzsz/trzsz-ssh/releases
    huaxianyan
        25
    huaxianyan  
       244 天前
    @LonnyWong 我问一下是不是新版 tssh hostname 默认变成关键字搜索了?之前是直接连接的
    LonnyWong
        26
    LonnyWong  
    OP
       244 天前
    @huaxianyan 是指 test* 和 test? 这种变成搜索了?这不符合预期,我想想怎么解决。
    LonnyWong
        27
    LonnyWong  
    OP
       239 天前
    @huaxianyan 最新的分支应该修复了,在 v0.1.12 发布之前,可以下面这样安装,安装后程序在 `~/go/bin/tssh`:
    ```
    go install github.com/trzsz/trzsz-ssh/cmd/tssh@main
    ```
    huaxianyan
        28
    huaxianyan  
       238 天前
    @LonnyWong 测试有效,辛苦了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3260 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 11:45 · PVG 19:45 · LAX 04:45 · JFK 07:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.