Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
cyshallchan opened this issue Oct 31, 2023 · 25 comments
Closed

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

cyshallchan opened this issue Oct 31, 2023 · 25 comments

Comments

@cyshallchan
Copy link

cyshallchan commented Oct 31, 2023

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

@lonnywong
Copy link
Member

有报什么错吗?

@cyshallchan
Copy link
Author

有报什么错吗?

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

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
Copy link
Member

我看给出的解法是: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
Copy link
Author

我看给出的解法是: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
Copy link
Member

lonnywong commented Nov 1, 2023

alias ssh="tssh" 吧?

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

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

@cyshallchan
Copy link
Author

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
Copy link
Member

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

@lonnywong
Copy link
Member

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

@cyshallchan
Copy link
Author

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

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

  • 首先我所有的ssh private key都保存到1passsword中,我的~/.ssh/config/目录下没有任何ssh公钥以及私钥;然后在1password开启了ssh-agent功能,当我在当前机器使用ssh连接远程主机的的时候会将请求转发给1password,接着从1passsword获取私钥来验证远程服务器的我的公钥的从而实现登陆;
  • 我的远程主机上也都开启了ssh-agent-forward功能,也就是说,我的远程主机上执行ssh登陆另外一台主机的时候也会将请求转发给当前主机的1password。

在使用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
Copy link
Member

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

@cyshallchan
Copy link
Author

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

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

@lonnywong
Copy link
Member

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

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

@cyshallchan
Copy link
Author

我没有安装 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
Copy link
Member

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

@cyshallchan
Copy link
Author

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

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

@lonnywong
Copy link
Member

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

image

@cyshallchan
Copy link
Author

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

image

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

@lonnywong
Copy link
Member

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

@cyshallchan
Copy link
Author

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

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

@lonnywong
Copy link
Member

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

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

@cyshallchan
Copy link
Author

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

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

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

@lonnywong
Copy link
Member

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

@cyshallchan
Copy link
Author

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

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

@lonnywong
Copy link
Member

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

@cyshallchan
Copy link
Author

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

好的,那我先关闭issue。

lonnywong added a commit that referenced this issue Nov 12, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants