在CentOS上设置SSH公钥身份验证的2个简单步骤
本教程说明了如何设置 SSH公钥认证 在CentOS / RHEL桌面上。 基本上有两种通过OpenSSH服务器验证用户登录身份的方法: 密码认证 和 公钥认证。 后者也称为 无密码SSH登录 因为您不需要输入密码。
步骤1:在CentOS / RHEL桌面上生成SSH公钥/私钥对
在CentOS / RHEL桌面(而不是服务器)上,在终端窗口中输入以下命令。
ssh-keygen -t rsa -b 4096
哪里:
-t
代表type
。 上面的命令生成一个RSA类型的密钥对。 RSA是默认类型。-b
代表bits
。 默认情况下,密钥的长度为3072位。 我们使用4096位密钥来增强安全性。
当询问您要保存密钥的文件时,只需按 Enter
使用默认文件。 接下来,输入一个至少20个字符长的密码。 密码短语用于加密私钥。
- 私钥(不要与任何人共享)将保存在 .ssh / id_rsa 文件放在主目录下。
- 公钥将保存在 .ssh / id_rsa.pub 文件。
从randomart图片中,我们可以看到密钥的长度(RSA 4096
)。 现在运行以下命令。
file ~/.ssh/id_rsa
您应该看到以下输出:
/home/username/.ssh/id_rsa: OpenSSH private key
如果看到“没有这样的文件或目录”错误,则表明未创建SSH密钥对。 跑过 ssh-keygen -t rsa -b 4096
命令再次创建它。
步骤2:将SSH公钥上载到远程Linux服务器
暗示:远程服务器可以运行任何Linux发行版:Debian,Ubuntu,RHEL,CentOS,无论如何,只要它运行OpenSSH服务器,就可以使用以下方法。
这很容易做到 ssh-copy-id
命令,随命令一起提供 openssh-clients
包。
ssh-copy-id [email protected]
输入远程用户的密码。
公钥将存储在 .ssh / authorized_keys 文件位于远程用户的主目录下。 现在,SSH进入远程服务器。
ssh [email protected]
这次您需要输入RSA 键 密码短语 解锁私钥。 您可以在登录时选择自动解锁密钥,这样以后就不必输入密码了。
输入正确的密钥密码后,您将登录到远程Linux服务器。 现在从远程服务器退出。
exit
然后再次SSH到远程服务器:
ssh [email protected]r-ip
这次,尽管您没有键入密码或密钥密码,但是您仍自动登录到远程服务器。 另外,使用时,您无需键入密码或密钥密码 scp
传输文件的命令。 的 scp
命令由 openssh-clients
软件包,默认情况下安装在CentOS / RHEL桌面上。
在远程服务器上实施SSH公钥身份验证
尽管默认情况下现在使用SSH密钥登录服务器,但是您仍然可以使用密码登录另一台计算机上的服务器。 您不希望黑客对您的服务器发起暴力攻击,因此在OpenSSH服务器中禁用密码身份验证是一个好习惯。
要禁用密码验证,请编辑 /etc/ssh/sshd_config
文件在远程服务器上。
sudo nano /etc/ssh/sshd_config
找到这一行:
#PasswordAuthentication yes
更改为:
PasswordAuthentication no
然后找到 ChallengeResponseAuthentication
线。 确保将其值设置为 no
像下面如果设置为 yes
,您仍然可以使用密码登录。
ChallengeResponseAuthentication no
保存文件并重新启动SSH服务。
sudo systemctl restart sshd
现在,如果您没有对应的私钥 ~/.ssh
目录中,当您尝试通过SSH进入远程服务器时,将看到以下错误。
Permission denied (publickey).
这意味着远程服务器仅允许使用ssh密钥进行SSH登录,而不允许密码验证。 注意 如果你设置 PasswordAuthentication
至 no
和 ChallengeResponseAuthentication
至 yes
,那么您仍然可以使用密码登录。 要禁用密码登录,必须将两者都设置为 no
。
备份公共/私人密钥对
禁用SSH密码身份验证后,备份SSH密钥非常重要。 如果您丢失密钥,则将被锁定在服务器之外。 将公共/专用密钥对备份到安全位置,例如USB驱动器。
cp ~/.ssh/id_rsa* /path/to/safe/location/
您可以将密钥对复制到新的Linux计算机上,然后使用SSH密钥将SSH复制到服务器中。 将密钥对复制到新计算机后,将其移动到 .ssh/
新用户的目录。
mv id_rsa* ~/.ssh/
您需要将密钥对的所有者更改为新计算机上的用户。
sudo chown new-user:new-user ~/.ssh/id_rsa*
现在,您可以使用SSH密钥登录到新计算机上的远程服务器。
您还可以将密钥对存储在一个文件夹中,然后使用加密压缩该文件夹并将其发送到NextCloud之类的云存储。
允许从受信任的IP地址进行密码身份验证
您可能希望允许使用自己的IP地址进行密码身份验证,因此,如果SSH密钥丢失了,您仍然可以通过SSH登录到服务器。
暗示:如果您没有静态IP地址,则可以在数据中心内设置自托管的VPN服务器。
打开远程服务器上的SSH守护程序配置文件。
sudo nano /etc/ssh/sshd_config
在文件底部添加以下行。 用您自己的IP地址替换10.0.0.2。
Match Address 10.0.0.2 PasswordAuthentication yes
如果客户端从192.168.0.2连接,则允许密码身份验证。 您可以添加多个IP地址。
Match Address 10.0.0.2 10.0.0.3 PasswordAuthentication yes
或像这样使用CIDR表示法:
Match Address 10.0.0.0/24 PasswordAuthentication yes
保存并关闭文件。 重新启动OpenSSH服务器。
sudo systemctl restart sshd
更改私钥密码
如果您需要更改私钥密码,则可以使用以下命令进行更改:
ssh-keygen -f ~/.ssh/id_rsa -p
输入您的旧密码,然后输入新密码。
包起来
希望本教程对您有所帮助 SSH公钥认证 在CentOS / RHEL桌面上。 您可能还想阅读:
- 在Windows上使用SSH登录Linux服务器的3种方法
与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂