【问题标题】:Connection failed. Exhausted available authentication methods连接失败。用尽了可用的身份验证方法
【发布时间】:2020-04-03 21:56:15
【问题描述】:

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

Connectionx.x.x.xfailed. 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 到 ruby​​Mine 终端内的服务器 ssh ubuntu@x.x.x.x

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

有什么想法吗?

【问题讨论】:

    标签: ssh ftp sftp ssh-agent rubymine-7


    【解决方案1】:

    我通过为 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} }(无效键)')。

    This comment 引导我找到这个解决方案。

    【讨论】:

      【解决方案2】:

      感谢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 地址,希望这对某人有所帮助。

      【讨论】:

        【解决方案3】:

        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 代理,您将不会获得它的好处。

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

        【讨论】:

        • 面临同样的问题。刚刚重新输入密码,连接就恢复了。
        猜你喜欢
        • 2013-12-30
        • 2013-03-26
        • 2013-07-21
        • 2010-09-12
        • 2014-12-13
        • 1970-01-01
        • 2022-01-24
        • 2020-12-23
        • 1970-01-01
        相关资源
        最近更新 更多