2

我们有一个 Rails 应用程序需要通过 ssh 连接到远程服务器(unix)并执行一些命令行操作。我对安全性不太了解,所以寻求建议。目前,控制器接收来自视图的提交,在 params 散列中带有密码(未散列,或任何东西)。然后我们使用 Net::SSH gem ssh 到远程服务器并做一些事情。这似乎是各种不安全的。我们的想法是:

  • 通过 SSH 设置公钥身份验证,因此不需要 pw(我们的用户数量很少,所以设置这个没有问题)

或者

  • 在视图中散列密码,在控制器中解码,然后调用 ssh 命令

或者

  • 在视图中对 pw 进行散列和加盐?(真的不知道这是如何工作的,只是一个想法)

任何文章或解释的链接,非常感谢。谢谢!

4

2 回答 2

0

使用公钥身份验证,您只是在您的网络服务器和您要连接到的服务器之间进行身份验证。因此,如果我了解您的布局,那么访问该页面的任何人都不需要密码即可进入。如果您通过帖子传递密码,您可以简单地使用类似这样的方式从日志中过滤它

filter_parameter_logging :password

在您的应用程序控制器中。然后它只是在内存中传递,而不是存储在任何静态的地方。尽管通过 javascript 在视图中进行散列和加盐处理,然后在控制器中解码,但如果您不使用 SSL,可能仍然是一个好主意。我当然不会反对实施相当简单的额外安全措施......

编辑:看起来在 Rails 3 中过滤参数的方法是

config.filter_parameters += [:password]

在 config/application.rb

于 2012-12-06T20:10:59.337 回答
0

我会投票给你的第一个选项——公钥认证。人们需要知道的密码越少越好。除非您的表单使用 HTTPS (SSL) 显示,否则密码有点不安全,并且正如 @Scott S 在他的回答中指出的那样,它确实会出现在日志等意想不到的地方,除非您过滤它。

使用 ssh 设置公钥身份验证的最常见方法是使用具有空密码的密钥。更安全的方法可能是使用ssh-agent,只要服务器本身是安全的(特别是请求服务器的私钥),这可能不是必需的。

于 2012-12-06T20:26:59.087 回答