连接失败。可用的身份验证方法已用尽

sim*_*imo 2 ftp ssh sftp ssh-agent rubymine-7

我尝试使用 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
Run Code Online (Sandbox Code Playgroud)

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

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

任何想法?

Vla*_*nov 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 代理侦听 UNIX 套接字上的新连接,并且该套接字的路径始终应存储在环境变量中SSH_AUTH_SOCK。因此,当您在公共终端(您可以使用工具成功连接到服务器)和 IDE 内的终端中echo $SSH_AUTH_SOCK运行该命令时,请确保该命令显示相同套接字的路径。ssh


更新:

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

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

SSH 代理的发明是为了仅解码一次加密密钥并多次使用它们。如果您在每次 SSH 连接之前都启动了新的 SSH 代理,您将无法获得其好处。

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