1

我正在尝试使用 SFTP 添加部署配置,但是,我收到此错误:

Connectionxxxxfailed. Exhausted available authentication methods 我正在使用 OpenSSH 配置和身份验证代理。

我检查了 RubyMine 终端内的 ssh 代理,我发现多个实例正在运行:

$ ps -ef | grep ssh-agent                                                                                                                                                                                            
  501  9724     1   0 Mon02PM ??         0:00.02 ssh-agent -s
  501 14553     1   0 Mon03PM ??         0:00.02 ssh-agent -s
  501 15132     1   0 Mon03PM ??         0:00.01 ssh-agent -s
  501 16276     1   0 Mon04PM ??         0:00.00 ssh-agent -s
  501 16759     1   0 Mon04PM ??         0:00.01 ssh-agent -s
  501 27662     1   0  6:40PM ??         0:00.01 ssh-agent -s
  501 31227     1   0 10:48AM ??         0:00.01 ssh-agent -s
  501 54740     1   0  4:03PM ??         0:00.01 ssh-agent -s
  501 64837     1   0  6:30PM ??         0:00.01 /usr/bin/ssh-agent
  501 66822     1   0  6:35PM ??         0:00.01 ssh-agent -s
  501 67155 61559   0  6:36PM ttys002    0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn ssh-agent

另外,我实际上可以通过 ssh 进入ssh ubuntu@x.x.x.xruby​​Mine 终端内的服务器

注意:每次我使用 ssh-agent 时,我都必须启动一个新实例,似乎 RubyMine 无法访问正在运行的 ssh-agent

任何想法?

4

3 回答 3

5

tl;dr在 IDE 中打开一个终端(查看 -> 工具窗口 -> 终端)并运行ssh-add -l. 如果您没有看到所需的公钥,请ssh-add在同一终端中运行并再次尝试连接。否则,让我们更深入地调查。


通过搜索找到此答案的每个人的解释:

Exhausted available authentication methods表示 SSH 客户端尝试了所有可能的身份验证方法,但没有一个成功。可能是密码错误、公钥错误或缺失、Kerberos 票证缺失等,也可能是各种组合的所有内容。

您可以打开idea.log并搜索此错误消息。在消息上方,您将看到一条大日志消息,其中包含连接选项、从 SSH 代理获取的公钥、从 ssh_config 加载的公钥、SSH 代理套接字的路径、尝试了哪些身份验证方法以及服务器对它们的反应。


我对这个特殊情况的想法:

粗略地说,SSH-agent 是一种用于未加密私钥的内存键值存储。与大多数其他内存存储一样,不同的数据库进程将具有不同的存储数据和不同的连接套接字。

许多启动的 SSH 代理看起来很可疑。有可能将公钥添加到某个代理中,但 IDE 尝试使用另一个 SSH 代理。

在类 unix 系统上,SSH-agent 侦听 unix 套接字上的新连接,并且该套接字的路径始终应存储在环境变量SSH_AUTH_SOCK中。echo $SSH_AUTH_SOCK因此,当您在通用终端(您可以使用ssh工具成功连接到服务器)以及在 IDE 内的终端中运行该命令时,请确保该命令显示相同套接字的路径。


升级版:

注意:每次我使用 ssh-agent 时,我都必须启动一个新实例,似乎 RubyMine 无法访问正在运行的 ssh-agent

是的,IDE 看不到新的 SSH 代理。对于已经启动的所有其他应用程序来说,这几乎是不可能的。当您使用命令启动代理时eval $(ssh-agent),它仅为当前 shell 进程设置环境变量SSH_AUTH_SOCK,但所有其他进程仍保留旧值。

SSH 代理被发明用于仅对加密密钥进行一次解码并多次使用它们。如果您在每次 SSH 连接之前都启动了一个新的 SSH 代理,您将不会获得它的好处。

我建议在[[ -n "$SSH_AUTH_SOCK" ]] || eval $(ssh-agent)您的~/.bashrc. 当您登录时,它将启动一个 SSH 代理。

于 2019-12-11T06:23:36.733 回答
1

感谢werehuman回答,它导致了我的案例的最终答案,在idea.log我发现只使用了密钥.ssh/id_rsa时,我解决问题的方法是使用~/.ssh/config主机名来识别我的服务器并明确设置正确的 ssh 私钥作为:

   Host my_server
          Hostname x.x.x.x
          User ubuntu
          IdentityFile ~/.ssh/the_proper_key.pem

然后在 RubyMine 中,我使用my_server主机而不是 IP 地址,希望这对某人有所帮助。

于 2019-12-11T08:47:17.980 回答
0

我通过为 ruby​​mine 生成的特定 2048 位 ssh 密钥解决了这个问题:

ssh-keygen -t rsa -b 2048 -C "jetbrain specific"

我的 4096 位 ssh 密钥似乎在 jetbrain 工具中不起作用(错误:'publickey by com.intellij.ssh.impl.sshj.PlatformAuthPublickey(path=/home/yolo/.ssh/id_rsa{,.pub}}(无效钥匙)')。

此评论将我引向此解决方案。

于 2020-01-24T16:19:12.187 回答