我怎样才能提高SSH安全性? 我可以同时需要密钥和密码吗?

我有一个小型的服务器networking,我想增加一般的安全性。 我没有足够的时间/金钱/偏执来build立VPN – 我可以通过什么方式提高系统的安全性?

有一件事可能是要求用户同时发送密钥并input密码。 这对谷歌来说有点难,因为关于“ssh密码”的一切都是关于没有密码的sshing。 🙂

我一直想要玩的一个scheme是要求传入的连接只来自dyndns ip地址的白名单。 我知道一些安全主pipe会想到这个主意会呕吐,但事实是这会增加一个盒子的复杂性。

你怎么看? 还有什么呢?

使用密码和密钥login与“仅使用密钥”相同。 在密钥创build期间,您被要求input密码。 如果您将其留空,则不会要求您input密码。 如果您填写了一些密码,每当您想要login时都会被要求input密码。

如果你担心安全问题,可以考虑一下在这个论坛上提到的一些build议:

  • 禁用根用户的sshlogin
  • 只允许从定义的IP地址(iptables,hosts.allow,…)
  • 移动SSH端口到另一个端口(更安全的话,但它的工作原理)
  • 监视外部login尝试并做出相应的反应
  • 保持你的系统是最新的

等等

更新:请参考这里的答案,了解如何在OpenSSH服务器上同时使用公钥和本地系统密码。

我觉得有趣的一个想法是端口敲门声 – 基本上,为了build立ssh连接,首先必须在ssh服务器确认连接请求之前探测一系列其他端口。 如果没有使用正确的端口序列,则没有响应,所以它看起来好像没有运行ssh服务器。 端口序列是可定制的,可以与您的预期用户共享; 其他人将无法连接。

我自己并没有尝试过,但是从我听到的(实际上并不多)开销是微不足道的,它极大地降低了你的知名度。

有关直接在SSH中启用的补丁和大量相关讨论:

这也可以通过将密码validation脚本与使用ForceCommandconfiguration选项相结合来进行修改。

最后,尽pipe没有模块存在,但是如果将公钥authentication转移到PAM,那么在PAMauthenticationauthentication成功之前,您可以要求两个步骤都通过。

只是使用

 RequiredAuthentications publickey, password 

sshd_config如果您使用ssh.com中的sshd。 这个function在OpenSSH中不可用。

您也可以使用一次性密码来提高安全性。 这将允许用户从不安全的terminallogin,如果他们以前生​​成下一个密码,可能会有一个键盘logging。 此外,还有一些密码生成器,甚至可以安装在较老的Java MIDP手机上,随身携带。

我build议你永远不要运行sshd,rdp或者没有IP限制的pipe理服务。 实际上, 我build议限制对通过VPN连接的pipe理员访问这些服务。

关于同时需要密钥和密码的原始问题,如果您正在运行RHEL或CentOS 6.3,那么现在就是可行的。 RHEL 6.3发行说明对此进行了描述,这是将其添加到sshd_config中的一个问题

 RequiredAuthentications2 publickey,password 

我非常同意3molo。 OpenSSH是Linux和Unix的默认SSH服务器。 我们没有理由去改变它,特别是为了安全。 VPN应该是最好的解决scheme,它可以encryption我们的stream量并提供两步密码授权。

不知道为什么没有人提到它,但是 – 你应该确保生成的密钥长度超过默认的1024位,这不再被认为是安全的。