我有一个 CentOS 6 的 VPS。我注意到有很多通过 SSH 的登录尝试,所以我想通过基于密钥的身份验证来锁定它。这是我到目前为止所做的......
在我的客户端计算机 (OSX) 上运行以下命令
ssh-keygen -t rsa
使用默认设置(无密码、默认名称等)执行此操作
在我的客户端上设置以下权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
使用以下命令将我的公钥复制到我的 VPS 上的用户文件夹的根目录(假名称/IP)
scp id_rsa.pub [email protected]:/home/fakeuser/id_rsa.pub
在这里,我注意到我的 .ssh 中没有authorized_keys 文件。所以我用触摸来创建它。然后我使用CAT将.pub的内容复制到authorized_keys文件中
cat id_rsa.pub >> ~/.ssh/authorized_keys
并在 .ssh 和authorized_keys 上设置适当的权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
在 /etc/ssh/sshd_config 中,我取消注释了以下内容
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
然后我重新启动了sshd
service sshd restart
据我所知,这就是启用公钥身份验证所需要做的全部事情。但是,当我尝试在不提供 -i 私钥的情况下进行 SSH 时,所有设备都允许我进入。
答案1
如果客户端密钥位于默认位置,~/.ssh/id_$alg
则会自动使用它,除非您使用-o IdentitiesOnly=yes
(或等效的配置文件条目)禁用它。如果您能够从没有私钥副本的客户端进行连接和如果不指定密码,则说明您的服务器上的身份验证设置不正确。如果你想使用仅有的私钥->公钥认证,配置PasswordAuthentication no
。
PS:(anything >>file
并且anything >file
)如果文件不存在,则创建该文件,您不需要touch
它。默认的远程目录scp
是您的主目录,因此您通常不需要指定它。
还:
RSAAuthentication
适用于 SSHv1,它在几十年前就被破坏了,永远不应该使用,并且在所有 OpenSSH 版本中默认禁用很长一段时间,并且从 7.4 开始从服务器端完全删除,尽管我预计 CentOS 6 可能没有最新的版本。
PubkeyAuthentication yes
和AuthorizedKeysFile .ssh/authorized_keys
(加上authorized_keys2
这是一个遗留物,不再使用)是默认值,所以你实际上不需要取消注释它们。
答案2
如果您只想允许公钥/私钥,则需要在服务器上显式禁用密码身份验证。在您的/etc/ssh/sshd_config
更改或添加设置中:
PasswordAuthentication no
我还喜欢显式禁用我不使用的所有其他类型的身份验证,例如 Kerberos 和 GSSAPI。