无法使用Elixir连接到远程SSH服务器

6

我一直在尝试使用 Elixir 连接到远程 SSH 服务器。

下面是我在 IEX 中执行的操作:

[Macintosh] elixir/logglycious (master|…)> iex                                                                            15-07-20 0:11
Erlang/OTP 17 [erts-6.4] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]

Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> :application.start(:crypto)
{:error, {:already_started, :crypto}}
iex(2)> :application.start(:public_key)
{:error, {:not_started, :asn1}}
iex(3)> :application.start(:asn1)
:ok
iex(4)> :application.start(:public_key)
:ok
iex(5)> :application.start(:ssl)
:ok
iex(6)> :application.start(:ssh)
:ok
iex(7)> :ssh.connect("my.server.co.uk", 22, [ { :user, 'my_username' } ])
{:error, {:options, {:socket_options, [:inet]}}}
iex(8)>

首先,我必须说这个错误信息一点也没有帮助。不过,我在Slack社区得到了很好的支持。有人建议我也要启动inets应用程序。我尝试了连接,但是仍然出现了相同的错误。
我做错了什么?更重要的是,下次我如何找到解决这类问题的方法?
[已修复]存在多个问题。首先,服务器必须在单引号之间提供。然后确保您的公钥不需要密码。如果需要,则可以将其作为选项传递给connect函数。此外,并不需要启动我启动的所有应用程序。只需要:ssh.start就行了。

我建议你做一件事——从现在开始,当你报告这类问题时,请确保在最新的稳定版本上进行测试。Elixir的最新稳定版本是1.0.5(Erlang 18也是如此),这可能会对你收到的错误消息产生影响。 - Onorio Catenacci
谢谢你的推荐。我之前使用的是Elixir 1.0.4版本。不过我已经升级到了1.0.5版,但是仍然遇到了同样的错误信息。 - svarlet
注意我的用词可能 :) - Onorio Catenacci
1个回答

6
如果我们查看 :ssh.connect/3 的文档,可以发现 host 参数应该是一个字符串。既然这是 erlang 函数的文档,那么这个字符串指的是 charlist 字符串。单引号创建 charlist 字符串,双引号创建 UTF-8 编码的二进制字符串。请使用以下方式调用该函数: :ssh.connect('my.server.co.uk', 22, user: 'my_username')

确实,现在它的表现稍微好了一些。但仍然无法工作,不过原因已经变成了另外一个: {:error, '无法使用可用的身份验证方法进行连接'} - svarlet
@svarlet,你能否通过ssh命令行工具连接到服务器?当你成功连接后,请与我们分享所使用的选项,我们会尝试将其翻译成中文。 - Patrick Oscity
1
您还可以使用 String.to_char_list/1 将二进制转换为字符列表。 - Paweł Obrok
2
嘿,伙计们,我找到了问题所在。我很久没有被要求输入我的密码短语(公钥认证),以至于我认为我没有为它定义一个。后来我发现我已经定义了,并将其提供给连接调用的选项后,它就可以工作了。 然而,当连接尝试失败时,如果我们能获得更多详细信息,那就太好了。我本可以早些时间自己解决这个问题。也许已经有一种方法,但我不知道? - svarlet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接