我对此很陌生,所以请为我稍微解释一下。
我在本地使用 OSX,在 Linode 上使用 Ubuntu 服务器作为我的远程主机。据我了解,我可以ssh-keygen -b 4096
在本地使用它来生成两个文件:
~/.ssh/id_rsa
和~/.ssh/id_rsa.pub
然后在我的服务器上,我运行mkdir -p ~/.ssh && sudo chmod -R 700 ~/.ssh/
创建 .ssh 文件夹,并为“文件所有者”(无论它是什么,根据 chmod wiki)授予其递归读/写/执行权限。
然后我打电话
scp ~/.ssh/id_rsa.pub [email protected]:~/.ssh/authorized_keys
我猜测它使用 ssh 协议将公钥上传到我刚刚创建的authorized_key
服务器.ssh
文件夹中新创建的文件中。
因此,我认为这意味着公共文件位于服务器上,而公共和私有文件都位于我的本地机器上。
现在假设我编辑/etc/ssh/sshd_config
文件,其中我可以操作PermitRootLogin
、PasswordAuthentication
和ChallengeResponseAuthentication
。
我的问题:
我应该禁用 root 登录吗?我应该设置
PermitRootLogin
为no
或 吗without-password
?我应该禁用所有密码并仅使用密钥吗?那么PasswordAuthentication
和 呢ChallengeResponseAuthentication
?将私钥和公钥文件保存在本地机器上安全吗?我是否应该删除公钥文件,只保留私钥文件?
如果我仅仅依赖密钥,这是否意味着我现在面临一个新的弱点:有人进入我的机器,从而获取我的密钥文件?
答案1
使用 ssh 或任何服务器的“最佳实践”是:
评估您的资产价值以及您安装和配置 ssh 的服务器上的数据。这是局域网后面的家用计算机吗?还是包含敏感数据、私人信息、财务信息的服务器上的公共 IP 地址?等等。
阅读所有安全选项。
然后决定如何平衡安全性、易于访问、易于配置以及资产价值。
关于 ssh 的思考请参见 -http://bodhizazen.com/Tutorials/SSH_security
答案2
将私钥和公钥文件保存在本地机器上安全吗?我是否应该删除公钥文件,只保留私钥文件?
公钥可以从私钥推导出来(但反之则不行)。如何从 SSH 私钥中检索公钥?提供公钥仅仅是为了方便起见,这样您不必在每次需要将密钥添加到新服务器时都生成它。
如果我仅仅依赖密钥,这是否意味着我现在面临一个新的弱点:有人进入我的机器,从而获取我的密钥文件?
Enter这就是为什么您在运行时不要盲目按压ssh-keygen
,而是使用强密码(当然,与您的用户密码不同)来加密您的密钥。
我应该禁用 root 登录吗?
它默认是被禁用的,因为默认只允许基于密钥的登录,而 rootauthorized_keys
默认不允许。
我应该设置
PermitRootLogin
为no
还是 到without-password
?
之所以设置为,是without-password
因为这是安全的默认设置。您可以no
根据需要将其设置为。但是,如果您需要以 root 身份使用rsync
/ scp
,那么您会遇到麻烦。
我是否应该禁用所有密码并仅使用密钥,仅此而已?那么和
PasswordAuthentication
呢ChallengeResponseAuthentication
?
如果您可以坚持这一政策,那么肯定只使用密钥并禁用两者。