使用转发连接到远程计算机的 SSHgpg-agent
失败,但可以在其他计算机上使用。我无法使用本地凭据从远程计算机进一步进行 ssh gpg-agent
。
ssh -Avvv user@remotehost
显示此警告:
Warning: remote port forwarding failed for listen path /Users/user/.gnupg/S.gpg-agent
连接到远程主机后,我看不到任何有效的可用 ssh 密钥:
% ssh-add -L
Could not open a connection to your authentication agent.
答案1
ssh -A
我在 macOS 上远程工作时遇到过这种情况,但对于您想要转发的任何其他操作系统也是如此gpg-agent
!
- 确保您连接到远程主机的信息
~/.ssh/config
正确无误。另外,请确保您在从您的连接时<local_host>
使用此地址<remote_hostname>
或 IP<local_host>
ssh -A <remote_username>@<remote_hostname_or_ip>
。注意macOS 使用/Users/username
主目录不是/home/username
!!复制粘贴现有配置时要保持警惕。下面的例子:
Host <remote_hostname_or_ip>
HostName <remote_hostname_or_ip>
User <remote_username>
RemoteForward /Users/<remote_username>/.gnupg/S.gpg-agent /home/<local_host_username>`/.gnupg/S.gpg-agent.extra
- 确保您的
<local_host>
gpg-agent
配置包含enable-ssh-support
line 并且pinentry-program
正确且可操作(使用时它应该要求您提供 pinssh
),例如:
enable-ssh-support
pinentry-program /usr/local/bin/pinentry
- 确保你的
<local_host>
gpg-agent
正在运行。尝试连接到可用的已知主机。您可以重新加载 gpg-agent,它应该返回OK
状态:
% gpg-connect-agent reloadagent /bye
OK
确保您使用的
ssh -A
开关相当于给定远程主机的ForwardAgent yes
in 。~/.ssh/config
如果您总是想转发不带参数的代理,请使用第二个选项-A
。最重要的:确保远程主机没有
SSH_AUTH_SOCK
设置否则,您的本地计算机gpg-agent
将不会转发到远程计算机,并且它不会使用您的本地凭据!unset SSH_AUTH_SOCK
如果您手动设置该变量,则可以。如果您的远程主机 shell~/.profile
(或类似的)生成gpg-agent
并设置SSH_AUTH_SOCK
它也将覆盖您的本地主机代理套接字并且它将无法工作 - 注释掉:
#/usr/local/bin/gpg-agent --daemon
#SSH_AUTH_SOCK="$HOME/.gnupg/S.gpg-agent.ssh"; export SSH_AUTH_SOCK
答案2
在连接到 Fedora 34 服务器的 Fedora 34 笔记本电脑上,我收到“监听路径的远程端口转发失败”警告。
对我有用的是删除指定的文件,退出 ssh 会话,然后再次连接......
❯ gpg-agent --daemon
❯ ssh myserver
Warning: remote port forwarding failed for listen path /run/user/1000/gnupg/S.gpg-agent
[me@myserver] $ rm /run/user/1000/gnupg/S.gpg-agent
[me@myserver] $ exit
❯ ssh myserver
[me@myserver] $ gpg-agent # Verify that gpg-agent is working
gpg-agent[159856]: gpg-agent running and available
我每次都必须这样做。
然后我尝试按照此处的建议添加StreamLocalBindUnlink yes
到服务器的文件:/etc/ssh/sshd_config
https://wiki.gnupg.org/AgentForwarding
此后,我再也没有收到过警告消息。