elixir - 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
解决问题的方法。
推荐阅读
- css - 如何从字体真棒图标中删除下划线
- awk - AWK 不同的顺序导致完全不同的行为
- python - Unsplash API - 通过 id 访问特定照片
- javascript - 我如何使用 javascript 将图像添加到站点?
- swift - ARKit 4, RealityKit - 将本地变换转换为世界变换
- reactjs - 如何使用 react 来监听带有合约的循环事件?
- asp.net - 在 ASP.NET Core razor 页面中跨帖子和重定向保留现有查询字符串的最简单方法是什么?
- linkedin - UGC 视频发布到用户个人资料
- android - Flutter - 使用 Column/Expanded/ListView 的布局问题
- c++ - 如何使用 cxx crate 调用 C++ 构造函数?