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

Not able to connect to a remote SSH server with Elixir

我一直在尝试使用 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 应用程序。我做了并重试连接,但我再次遇到同样的错误。

我做错了什么?更重要的是,下次遇到这样的问题要怎么解决?

[已修复] 存在多个问题。首先,必须在单引号之间提供服务器。然后确保您的 public 密钥不需要密码。如果是,它可以作为选项传递给连接函数。另外,没有必要启动我启动的所有应用程序。 :ssh.start是我唯一需要的。

如果我们查看 :ssh.connect/3 的文档,我们会发现 host 参数应该是一个字符串。由于它是 erlang 函数的文档,因此字符串表示字符列表。单引号创建 charlist 字符串,双引号创建 utf-8 编码的二进制字符串。改为像这样调用函数::ssh.connect('my.server.co.uk', 22, user: 'my_username').