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

ssh xx 记住密码之后仍提示需要输入密码 #64

Closed zlsq closed 11 months ago

zlsq commented 11 months ago

环境:macos + warp终端 + 已经使用软连接 sudo ln -sv $(which tssh) /usr/local/bin/ssh 问题: 通过ssh --new-host配置成功之后,能成功通过 tssh xx、 ssh 选择 xx登陆。但是直接 ssh xx 会提示让输入密码,我直接control + c 退出又可以ssh登陆成功,显示信息如下:

ssh xx
root@10.9.2.68's password:
Warning: start control master failed: interrupt
Warning: dial ctrl unix [/Users/shuqin/.ssh/170243192817852] failed: dial unix /Users/shuqin/.ssh/170243192817852: connect: no such file or directory
lonnywong commented 11 months ago

因为 Warp 会开启 ControlMaster 的功能,它那个分块的功能依赖这个。

tssh 是用 go 实现的,现在 go 的库还不支持 ControlMaster 相关的功能,于是 tssh 就本地调起了一个 ssh 进程来做 ControlMaster 的事。要求输入密码是 ssh 进程的行为,所以 tssh 记住密码的功能看起来就不生效了。

我计划像 自动交互 那样,用类似 expect 的方式,支持 Warp 这种启用了 ControlMaster 时的“记住密码”的功能。

到时,大概会这样配置:

Host xxx
    #!! CtrlExpectCount 1  # 一般只要一次交互
    #!! CtrlExpectPattern1 *password:  # 输入密码提示的匹配表达式
    #!! CtrlExpectSendPass1 de88c4dbdc95d85303682734e2397c4d8dd29bfff09ec53580f31dd40291fc8c7755  # 用 tssh --enc-secret 得到的密码的密文串 
lonnywong commented 11 months ago

已实现,详见 README

v0.1.16 发布前,可以这样安装:

go install github.com/trzsz/trzsz-ssh/cmd/tssh@main
sudo rm /usr/local/bin/ssh
sudo ln -sv ~/go/bin/tssh /usr/local/bin/ssh