错误“非绝对主页”通过Net:SSH

时间:2012-04-30 22:16:23

标签: ruby ruby-on-rails-3 ubuntu-11.10 net-ssh

有问题的代码

Net::SSH.start('server name', 'user')

这会返回“非绝对主页”。 “用户”实际上确实有一个主目录。一种建议的方法是使用IdentityFile的完整路径修改〜/ .ssh / config。这并没有解决问题。

这个疯狂的部分是如果通过irb或console调用代码可以正常工作。我们尝试从类方法(使用相同的代码)中调用它时,它会返回“非绝对主页”错误。

'user'也可以通过命令行ssh进入服务器而不会出现问题。服务器正在运行Ubuntu。

更新

感谢@Phrogz - 解决这个问题的方法是将ENV ['HOME']设置为'/ home / deploy'。但是,我还没弄清楚为什么$ HOME被设置为“。”在服务器上。所以,在我或其他人明白这一点之前,我会在没有“答案”的情况下提出这个问题。必须手动设置HOME感觉更像是一个“黑客”而不是一个合适的解决方案,但它确实有效。

3 个答案:

答案 0 :(得分:2)

我们遇到了同样的问题,找到了根本原因。我们将脚本作为服务运行,如果您检查服务的联机帮助页,它会在运行脚本之前删除大多数env变量,包括HOME。我不知道你的情况是否相同,但是没有设置HOME。

net-ssh想要从用户主文件夹中查找ssh配置,因此用于强制ENV ['HOME']为“。”如果没有设定。但是当File.expand_path尝试扩展“〜/ .ssh”时,会引发ArgumentError。

这是两个月前修复的(https://github.com/net-ssh/net-ssh/pull/98),所以更新你的net-ssh gem应解决这个问题。

答案 1 :(得分:1)

如果没有设置HOME env var,肯定会有效。

答案 2 :(得分:0)

Linux根据/etc/passwd文件设置此信息。

检查/etc/passwd用户deployer中的内容。它应该在列表的底部附近。

项目以冒号分隔。 ENV['HOME']的值应该是该行中倒数第二个条目。

是空白,即两个冒号在一起吗?

我怀疑你的HOME变量不在/etc/passwd中,而是在一个默认的dotfiles中设置,例如.bashrc。然后,如果您的应用程序通过不提供点文件的init.d脚本运行,.bashrc将被短路。 (如果通过非交互式shell执行,许多.bashrc个文件将停止加载其余命令。

希望这会有所帮助,请回复你的发现。