在我开始目前的工作(一家小公司)之前,我的办公室网络上没有防火墙,而且几乎没有备份过任何东西。现在我已经签约成为一名专职系统管理员/一人 IT 部门,我一直在尽我所能改变这种状况。在向老板解释了我们的脆弱性之后,他允许我设置一些备份服务器,其中一个就在他家里。
现在,我正在尝试设置好一切,以便可以自动执行每日备份。我计划通过 ssh 使用 rsync 来执行此操作。为了安全起见以及为了便于自动化,我计划禁用 ssh 密码登录并仅使用 rsa 密钥验证。好吧,如果我设置了 rsa 密码,那么我仍然必须输入密码,这是一个问题。
没有 rsa 密码是否会使安全性大大降低?我是公司中唯一对这种事情有所了解的人,所以我不太担心有人会调用我机器上的终端(反正我不在时它总是被锁定的)并通过 ssh 进入其中一个备份服务器并造成任何损害。我对系统管理领域还很陌生,这是我第一次做这样的事情,我不想在安全设置中留下任何漏洞。
这里讨论的计算机运行的是 Ubuntu 10.10、SME Server 和 OSX 10.6,如果这有任何区别的话。
答案1
如您所知,密码给您带来的好处是,如果有人能够读取您的私钥,他们就“无法”使用它。
如果有人能够访问该私钥,您就应该理所当然地认为他们已经访问/破解了使用公钥设置的任何机器。即使您的 .ssh/known_hosts 被混淆了,.bash_history 或 .ssh/config 之类的东西也只能让这变得更容易。
密钥上没有密码并不是世界末日,尽管如此,这里有 3 个想法可以尝试帮助您更好地保护自己。 (最重要的是第二个,如果没有其他的话,请阅读它)
不要在所有机器和用户上使用相同的密钥。在每台机器(需要执行此类操作)上为每个用户生成自己的密钥对。这将让您对哪些人能够通过 ssh 连接到哪里进行细粒度控制。
将密钥添加到您的authorized_keys文件时,您可以将其锁定为只能运行特定命令,或只能从特定主机使用它。
查看
man ssh
并搜索命令=和来自=语法如下:
from="1.2.3.4",command="/path/to/executable argument" ssh-rsa key name
即弹出“rsync”并仅有的'rsync' 可以通过你的密钥调用,并且仅有的从 IP 地址 1.2.3.4 开始。多个 IP 可以用 分隔
,
。还支持主机名。另一个让我想到的是 sshd_config 中的“AllowUser”指令
允许用户
此关键字后面可以跟一串用户名模式,以空格分隔。如果指定,则仅允许与其中一个模式匹配的用户名登录。'*' 和 '?' 可用作模式中的通配符。只有用户名才有效;数字用户 ID 无法识别。默认情况下,允许所有用户登录。如果模式采用 USER@HOST 形式,则分别检查 USER 和 HOST,将登录限制为特定主机的特定用户。
这基本上确保了用户只能从某个位置登录。(尽管它也接受通配符)这不会解决您的所有问题,但至少会让其他人的问题变得更加困难。
答案2
你可以使用类似钥匙链让输入密码变得不那么麻烦。这比使用无密码登录稍微安全一些,并且可以与此处的其他答案结合使用。PriceChild 的回答非常好。
答案3
我个人使用 DSA 而不是 RSA,主要是因为我一直都在使用它,而且我知道它“有效”,但我猜理论是一样的。您可以在下文中用dsa
替换。rsa
来源:
$ ssh-keygen -t dsa
然后将文件的内容复制.ssh/id_dsa.pub
到.ssh/authorized_keys
目标用户帐户中。
然后,您就能够在源和目标之间进行 ssh 连接,无需密码。