
安全壳(SSH)是一个加密网络协议,旨在为客户和服务器之间的安全连接而设计。
两个最流行的SSH认证机制是基于密码的认证和基于公钥的认证。使用SSH密钥通常比传统的密码认证更加安全和方便。
这篇文章描述了如何在CentOS 8系统上生成SSH密钥。我们还将告诉你如何设置一个基于SSH密钥的认证,并在不输入密码的情况下连接到远程Linux服务器。
在 CentOS 上创建 SSH 密钥
你有可能在你的CentOS客户机上已经有一个SSH密钥对。如果你要生成一个新的密钥对,旧的将被覆盖。
运行以下ls命令来检查钥匙文件是否存在。
ls -l ~/.ssh/id_*.pub
如果该命令的输出结果是没有这样的文件或目录,或者没有找到匹配的文件,这意味着用户没有SSH密钥,你可以继续下一步,生成SSH密钥对。
否则,如果你有一个SSH密钥对,你可以使用这些密钥或备份旧的密钥并生成新的。
要生成一个新的4096位的SSH密钥对,并将你的电子邮件地址作为注释,运行。
ssh-keygen -t rsa -b 4096 -C "your_email@domain.com"
你会被提示指定文件名。
Enter file in which to save the key (/home/yourusername/.ssh/id_rsa):
按回车键,接受默认的文件位置和文件名。
接下来,你会被要求输入一个安全口令。你是否想使用口令,这取决于你。口令将增加一个额外的安全层。如果你不想使用口令,就按回车键。
Enter passphrase (empty for no passphrase):
整个交互过程看起来像这样。

为了验证你的新SSH密钥对是否生成,请输入。
ls ~/.ssh/id_*
/home/yourusername/.ssh/id_rsa /home/yourusername/.ssh/id_rsa.pub
就这样了。你已经在你的 CentOS 客户机上成功生成了一个 SSH 密钥对。
将公钥复制到服务器上
现在SSH密钥对已经生成,下一步是把公钥复制到你要管理的服务器上。
复制公钥到远程服务器的最简单和推荐的方法是使用 ssh-copy-id 工具。在你的本地机器终端输入。
ssh-copy-id remote_username@server_ip_address
该命令将要求你输入remote_username的密码。
remote_username@server_ip_address's password:
一旦用户通过验证,公钥文件(~/.ssh/id_rsa.pub)的内容将被附加到远程用户~/.ssh/authorized_keys文件中,并且连接将被关闭。
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'username@server_ip_address'"
and check to make sure that only the key(s) you wanted were added.
如果ssh-copy-id在你的本地计算机上不可用,使用下面的命令来复制公钥。
cat ~/.ssh/id_rsa.pub | ssh remote_username@server_ip_address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
使用SSH密钥登录到你的服务器
完成上述步骤后,你应该能够登录到远程服务器而不被提示输入密码。
为了验证这一点,尝试通过SSH登录到你的服务器。
ssh remote_username@server_ip_address
如果你没有为私钥设置口令,你将立即被登录。否则,你将被要求输入密码。
禁用SSH密码验证
为了给你的远程服务器增加一个额外的安全层,你可以禁用SSH密码认证。
在继续之前,确保你可以在没有密码的情况下以具有sudo权限的用户身份登录到你的服务器。
按照下面的步骤来禁用SSH密码认证。
- 登录到你的远程服务器。
ssh sudo_user@server_ip_address
用你的文本编辑器打开SSH配置文件/etc/ssh/sshd_config 。
sudo nano /etc/ssh/sshd_config
搜索以下指令,并按以下方式修改。/etc/ssh/sshd_config
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no
一旦你完成了保存文件并通过输入重启SSH服务。
sudo systemctl restart ssh
在这一点上,基于密码的认证被禁用。
总结
我们已经向你展示了如何生成一个新的SSH密钥对并设置一个基于SSH密钥的认证。你可以使用同一个密钥来管理多个远程服务器。你还学会了如何禁用SSH密码认证,并为你的服务器增加一个额外的安全层。
默认情况下,SSH监听端口为22。改变默认的SSH端口可以减少自动攻击的风险。为了简化你的工作流程,使用SSH配置文件来定义所有的SSH连接。