我正在尝试使用 SFTP 添加部署配置,但是,我收到此错误:Connection
x.x.x.x failed. 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.x
rubyMine 的终端内部注意:每次我使用 ssh-agent 时,我都必须启动一个新实例,似乎 RubyMine 无法访问正在运行的 ssh-agent
任何的想法?
最佳答案
tl;博士在 IDE 中打开一个终端(查看 -> 工具窗口 -> 终端)并运行 ssh-add -l
.如果您没有看到所需的公钥,请运行 ssh-add
在同一个终端中并尝试再次连接。否则,让我们更深入地调查。
通过搜索找到此答案的每个人的解释:Exhausted available authentication methods
表示 SSH 客户端尝试了所有可能的身份验证方法,但没有一个成功。可能是密码错误、公钥错误或缺失、Kerberos 票证缺失等,也可能是各种组合的所有内容。
您可以打开idea.log
并搜索此错误消息。在消息上方,您将看到一条大日志消息,其中包含连接选项、从 SSH 代理获取的公钥、从 ssh_config 加载的公钥、SSH 代理套接字的路径、尝试了哪些身份验证方法以及服务器对它们的 react 。
我对这个特殊情况的想法:
粗略地说,SSH-agent 是一种用于未加密私钥的内存键值存储。与大多数其他内存存储一样,不同的数据库进程将具有不同的存储数据和不同的连接套接字。
许多启动的 SSH 代理看起来很可疑。有可能将公钥添加到某个代理中,但 IDE 尝试使用另一个 SSH 代理。
在类 unix 系统上,SSH-agent 监听 unix 套接字上的新连接,并且该套接字的路径始终应存储在环境变量 SSH_AUTH_SOCK
中.所以确保命令 echo $SSH_AUTH_SOCK
当你在一个普通终端中运行它时,它会显示到同一个套接字的路径,在那里你可以使用 ssh
成功连接到服务器工具,并在 IDE 内的终端中。
升级版:
note: each I time I use ssh-agent, I had to start a new instance, it seems that RubyMine is un-able to access a running ssh-agent
是的,IDE 看不到新的 SSH 代理。对于已经启动的所有其他应用程序来说,这几乎是不可能的。当您使用命令
eval $(ssh-agent)
启动代理时,它设置环境变量SSH_AUTH_SOCK
仅适用于当前的 shell 进程,但所有其他进程仍保留旧值。SSH 代理被发明用于仅对加密 key 进行一次解码并多次使用它们。如果您在每次 SSH 连接之前都启动了一个新的 SSH 代理,您将不会获得它的好处。
我建议添加类似
[[ -n "$SSH_AUTH_SOCK" ]] || eval $(ssh-agent)
的内容给您的~/.bashrc
.当您登录时,它将启动一个 SSH 代理。
关于ssh - 连接失败。用尽了可用的身份验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59271876/