两步在CentOS服务器上设置SSH公钥认证
本教程介绍如何在CentOS/RHEL桌面上设置SSH公钥认证。OpenSSH服务器的用户登录认证基本上有两种方式:密码认证和公钥认证。后者也被称为无密码SSH登录,因为你不需要输入密码。
1、在CentOS/RHEL桌面上生成SSH公钥/私钥对。
在CentOS/RHEL桌面上(不是服务器),在终端窗口中输入以下命令。
ssh-keygen -t rsa -b 4096
其中,-t代表类型。
-t代表类型。上面的命令会生成一个RSA类型的密钥对。RSA是默认类型。
-b代表位数,默认情况下,密钥长度为3072位。默认情况下,密钥长度为3072位。我们使用4096位的密钥来增强安全性。
当被问及保存密钥的文件时,你可以直接按Enter键使用默认文件。接下来,输入一个至少20个字符长的好的口令。该口令用于加密私钥。
私钥(不要与任何人分享)将被保存在你的主目录下的.ssh/id_rsa文件中。
公钥将保存在.ssh/id_rsa.pub文件中。

从随机图象中我们可以看到密钥的长度(RSA 4096)。现在运行下面的命令。
file ~/.ssh/id_rsa
你应该看到以下输出。
/home/username/.ssh/id_rsa: OpenSSH private key
如果你看到 "No such file or directory "的错误,这意味着SSH密钥对没有创建。运行ssh-keygen -t rsa -b 4096命令再次创建它。
2、将你的SSH公钥上传到远程Linux服务器上
提示:远程服务器可以运行任何Linux发行版。Debian、Ubuntu、RHEL、CentOS等等,只要它能运行OpenSSH服务器,你就可以使用下面的方法。
这可以通过ssh-copy-id命令轻松完成,该命令随openssh-clients软件包一起提供。
ssh-copy-id remote-user@server-ip
输入远程用户的密码。

公钥将存储在远程用户主目录下的.ssh/authorized_keys文件中。现在SSH进入远程服务器。
ssh remote-user@server-ip
这个时候你需要输入RSA密钥口令来解锁私钥。你可以在登录时选择自动解锁密钥,这样以后就不用再输入密码了。

一旦你输入了正确的密钥口令,你就可以登录到远程Linux服务器。现在退出远程服务器。
exit
并再次SSH进入远程服务器。
ssh remote-user@server-ip
这次你会自动登录到远程服务器,尽管你没有输入密码或密钥口令。当使用scp命令传输文件时,你也不需要输入密码或密钥口令。scp 命令是由 openssh-clients 软件包提供的,默认安装在 CentOS/RHEL 桌面上。
3、在远程服务器上执行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,那么你仍然可以使用密码登录。如果要禁用密码登录,必须将这两项设置为否。
4、备份您的公钥/私钥对
一旦你禁用SSH密码验证,备份你的SSH密钥是非常重要的。如果你丢失了密钥,你将被锁定在服务器之外。将你的公钥/私钥对备份到一个安全的地方,比如你的U盘。
cp ~/.ssh/id_rsa* /path/to/safe/location/。
你可以将密钥对复制到新的Linux电脑上,然后使用SSH密钥进入服务器。一旦你把密钥对复制到新的电脑上,把它们移到新用户的.ssh/目录下。
mv id_rsa* ~/.ssh/。
你需要将密钥对的所有者改为新计算机上的用户。
sudo chown new-user:new-user ~/.ssh/id_rsa*。
现在你可以使用SSH密钥在新电脑上登录远程服务器。
你也可以将你的密钥对存储在一个文件夹中,然后将文件夹进行加密压缩,然后保存在云盘中。
5、允许从受信任的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
输入你的旧密码,然后输入新密码。
希望本教程能帮助您在CentOS/RHEL桌面上设置SSH公钥认证。