有问题的代码
Net::SSH.start('server name', 'user')
这返回“非绝对家”。 “用户”实际上有一个主目录。一种建议的方法是使用 IdentityFile 的完整路径修改 ~/.ssh/config。这并没有解决问题。
最疯狂的部分是,如果通过 irb 或控制台调用,代码可以正常工作。当我们尝试从类方法中调用它时(使用相同的代码),它会返回“非绝对主页”错误。
“用户”还可以通过命令行 ssh 进入服务器,不会出现问题。服务器运行的是 Ubuntu。
UPDATE
感谢@Phrogz - 解决此问题的方法是将 ENV['HOME'] 设置为 '/home/deploy'。但是,我还没有弄清楚为什么 $HOME 被设置为“。”在服务器上。因此,我将保留这个问题,不给出“答案”,直到我或其他人弄清楚这一点。必须手动设置 HOME 感觉更像是“黑客”而不是正确的解决方案,但它确实有效。
我们刚刚遇到了同样的问题,并找到了根本原因。我们将脚本作为服务运行,如果您检查服务的联机帮助页,它会在运行脚本之前删除大多数环境变量,包括 HOME。不知道你的情况是否一样,但是HOME没有设置。
net-ssh 想要从用户主文件夹查找 ssh 配置,因此它用于强制 ENV['HOME'] 为“.”如果没有设置。但是当 File.expand_path 尝试扩展“~/.ssh”时,会引发 ArgumentError 。
这个问题两个月前就已经修复了(https://github.com/net-ssh/net-ssh/pull/98),所以更新你的 net-ssh gem 应该可以解决这个问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)