如何解决Elixir SFTP在服务器上不起作用-密钥交换失败
由于某些原因,即使此代码在本地运行,我们的服务器也无法连接到sftp服务器。我还可以从运行我们的elixir应用程序的服务器在命令行上通过sftp连接。
Elixir版本:1.10.4-otp-23
connect("sftp.getevolved.com",user: "User",user_dir: "/etc/secrets/sftp",rsa_pass_phrase: ssh_passphrase()
)
def connect(host,opts) do
opts =
Keyword.merge(
[
user_interaction: false,silently_accept_hosts: true
],opts
)
|> Enum.map(fn
{key,value} when is_binary(value) -> {key,value |> String.to_charlist()}
value -> value
end)
with :ok <- @ssh.start,{:ok,channel_pid,connection} <-
@ssh_sftp.start_channel(
host |> String.to_charlist(),22,opts
) do
{:ok,{channel_pid,connection}}
end
end
当我尝试连接时,出现此错误{:error,'Key exchange failed'}
。这似乎暗示存在算法问题。有没有一种方法可以对此进行更多调试,我无法弄清楚如何从连接中获取有关失败原因的更多信息。
解决方法
事实证明,这是由于我们的应用程序在带有只读文件系统的k8s pod中运行。我创建了一个tmp可写目录,并将其用作user_dir
,并解决了该问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。