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.72k stars 102 forks source link

ssh agent 一段时间会出问题 #51

Closed cyshallchan closed 1 year ago

cyshallchan commented 1 year ago

具体详情可以看下这个帖子,使用原版ssh就没有这个问题。

lonnywong commented 1 year ago

有报什么错吗?

cyshallchan commented 1 year ago

有报什么错吗?

报错也是和这帖子里是一样的报错:

2023/01/18 06:24:29 agent 11: agent: client error: write unix ->/Users/bene/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock: write: broken pipe
                                       error fetching identities: agent refused operation
lonnywong commented 1 year ago

我看给出的解法是:https://help.okta.com/asa/en-us/Content/Topics/Adv_Server_Access/docs/setup/ssh.htm

1、你执行 sft ssh-config 会输出什么( 可以把一些敏感的打码了,如 IP 等 )?

2、你的 ~/.ssh/config 里是怎么配置的?

3、你怎么样登录的,是 sft tssh web0.example.com 还是怎么样?主要把所有参数列出来。

cyshallchan commented 1 year ago

我看给出的解法是:https://help.okta.com/asa/en-us/Content/Topics/Adv_Server_Access/docs/setup/ssh.htm

1、你执行 sft ssh-config 会输出什么( 可以把一些敏感的打码了,如 IP 等 )?

2、你的 ~/.ssh/config 里是怎么配置的?

3、你怎么样登录的,是 sft tssh web0.example.com 还是怎么样?主要把所有参数列出来。

这个解决办法我看过,需要另外在装个软件,我是比较排斥这种的,所以就没有去尝试;

下面是我的config配置:

Host *
  IdentityAgent "~/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"
  ServerAliveInterval 1800
  TCPKeepAlive no
  ForwardAgent yes
  ServerAliveInterval 30
  ServerAliveCountMax 5

Host desktop-debian
  Hostname 192.168.6.9
  User root

Host openwrt
  Hostname xxx.xxx.xxx.xxx
  User root

Host openwrt-frp
  Hostname xxx.xxx.com
  User root
  Port 20222

Host nuc
  Hostname xxx.xxx.xxx.xxx
  User root

Host nas
  Hostname xxx.xxx.xxx.xxx
  User root

我平常使用的是自己设置alias的,alias tssh='ssh',然后登陆某台机器的时候直接ssh 目标主机Host

lonnywong commented 1 year ago

alias ssh="tssh" 吧?

现在 tssh 还不支持 IdentityAgent 配置,等我有空了加一下。

在支持 IdentityAgent 之前,你试试先执行 export SSH_AUTH_SOCK="/Users/xxx/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"( 注意 xxx 要换成你的用户名,完整的路径要存在 ),然后再用 tssh 登录,看看效果?

cyshallchan commented 1 year ago

alias ssh="tssh" 吧?

现在 tssh 还不支持 IdentityAgent 配置,等我有空了加一下。

在支持 IdentityAgent 之前,你试试先执行 export SSH_AUTH_SOCK="/Users/xxx/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"( 注意 xxx 要换成你的用户名,完整的路径要存在 ),然后再用 tssh 登录,看看效果?

SSH_AUTH_SOCK 这个变量我是设置了的,其对应路径下也是有socket文件的,所以应该不是这个问题。

lonnywong commented 1 year ago

和 IdentityAgent 是同一个路径?有没有 ~/ 的?然后用 openssh 时没有问题?

lonnywong commented 1 year ago

加个 --debug 参数登录,看看有哪些 agent 相关的输出?

cyshallchan commented 1 year ago

和 IdentityAgent 是同一个路径?有没有 ~/ 的?然后用 openssh 时没有问题?

可能我之前没说明白,我在描述下使用场景和使用问题:

在使用tssh从当前主机登陆远程主机没有问题,执行ssh-add -l也都能查看到1password中存储的private key,但是过一段时间之后这个ssh-agent-forward就会出现问题,这时候执行ssh-add -l就会报错:

2023/01/18 06:24:29 agent 11: agent: client error: write unix ->/Users/bene/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock: write: broken pipe
                                       error fetching identities: agent refused operation

之后需要使用ssh协议的地方都会有问题,因为和1password这条路不通了嘛。

而使用openssh则没有任何问题。

lonnywong commented 1 year ago

一段时间,大约是要多久?我看看我这里能不能复现。

cyshallchan commented 1 year ago

一段时间,大约是要多久?我看看我这里能不能复现。

刚测试了下,大概一分钟的样子

lonnywong commented 1 year ago

我没有安装 1password,用的 mac 自带的 ssh-agent ,刚试了下,转发到远程服务器之后,至少十几分钟都没问题。

你在登录前、登录后( 没问题时,有问题时 ),分别在本地 mac 中( 另一个终端 )执行 ls -i $SSH_AUTH_SOCK,看看输出的第一个数字会不会变化?

cyshallchan commented 1 year ago

我没有安装 1password,用的 mac 自带的 ssh-agent ,刚试了下,转发到远程服务器之后,至少十几分钟都没问题。

你在登录前、登录后( 没问题时,有问题时 ),分别在本地 mac 中( 另一个终端 )执行 ls -i $SSH_AUTH_SOCK,看看输出的第一个数字会不会变化?

远程机器:

❯ ls -i $SSH_AUTH_SOCK
60817471 /tmp/ssh-XXXX3PSMSF/agent.550614

本地机器:

❯ ls -i $SSH_AUTH_SOCK
124395469 '/Users/xxxx/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock'

正常情况和出问题时都是一样的。

lonnywong commented 1 year ago

也就是,本地机器,一直都是 124395469 ,没变过?

cyshallchan commented 1 year ago

也就是,本地机器,一直都是 124395469 ,没变过?

是的,本地机器的不会变,远程的机器每一次新的ssh会话都会变。

lonnywong commented 1 year ago

用 openssh 时,是不是会弹出类似下面的对话框?那在用 tssh 时,会不会弹出来?是从来不弹出,还是没问题时会弹出?

image

cyshallchan commented 1 year ago

用 openssh 时,是不是会弹出类似下面的对话框?那在用 tssh 时,会不会弹出来?是从来不弹出,还是没问题时会弹出?

image

都会弹的,不然根本无法使用其中存储的私钥。

lonnywong commented 1 year ago

有问题时,也会弹出来?是弹出来之后,在你没确认之前就报错,还是在你确认之后才报错?

cyshallchan commented 1 year ago

有问题时,也会弹出来?是弹出来之后,在你没确认之前就报错,还是在你确认之后才报错?

image

这个弹窗不是每次弹阿,会根据设置选项在一定条件默认批准。

lonnywong commented 1 year ago

你可以把 https://github.com/trzsz/trzsz-ssh/blob/a71ac3a3e4cb4b5452a46b8b53b3137c3d7c580b/tssh/login.go#L848C18-L848C32 这一行 ForwardToAgent 改成 ForwardToRemote 看看效果。

如果不知怎么改,可以加 README 最下面的 QQ 群。

cyshallchan commented 1 year ago

你可以把 https://github.com/trzsz/trzsz-ssh/blob/a71ac3a3e4cb4b5452a46b8b53b3137c3d7c580b/tssh/login.go#L848C18-L848C32 这一行 ForwardToAgent 改成 ForwardToRemote 看看效果。

如果不知怎么改,可以加 README 最下面的 QQ 群。

不行的,这俩函数的入场都不一样。

lonnywong commented 1 year ago

第二个参数直接写你那个路径 "/Users/xxx/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

cyshallchan commented 1 year ago

第二个参数直接写你那个路径 "/Users/xxx/Library/Group Containers/2BUA8C4S2C.com.1password/t/agent.sock"

image

测试下来没问题了,感谢感谢~

lonnywong commented 1 year ago

看来 1password 那个 unix socket 连上之后,会超时,不能一直用。 但是,ForwardToRemote 不兼容 Windows ,我抽空研究下怎么搞。

cyshallchan commented 1 year ago

看来 1password 那个 unix socket 连上之后,会超时,不能一直用。 但是,ForwardToRemote 不兼容 Windows ,我抽空研究下怎么搞。

好的,那我先关闭issue。