SSH全称Secure shell是一种加密的网络通讯协议,旨在用于客户端和服务器之间的安全连接。
基于密码的身份验证和基于公钥的身份验证是最流行的SSH身份验证机制。与传统的密码身份验证相比,使用SSH密钥通常更安全,更方便。
本教程说明如何在CentOS 8系统上生成SSH密钥。包括使用ssh-keygen
命令生成创建SSH密钥对,使用ssh-copy-id
命令将SSH公钥复制到远程服务器,配置SSH无密码登录,禁用SSH密码登录,如何在不输入密码的情况下连接到远程Linux服务器。设置基于SSH公钥的身份验证。
创建SSH密钥
如果您的CentOS客户端计算机上还没有SSH密钥。 您需要生成新的密钥对。如果已经存在SSH的密钥对,则旧的密钥对将被覆盖。
SSH密钥对存储在用户的家目录~/.ssh
中,.ssh
是一个隐藏目录。如果你计算机已经存在SSH密钥对,你将会看到id_rsa
和id_rsa.pub
文件。
如需确定CentOS计算机是否已经存在SSH密钥对,运行以下ls
命令检查密钥文件是否存在:
ls -l ~/.ssh/id_*.pub
如果命令的输出返回类似No such file or directory
文件没有找到或no matches found
的信息,则表示当前用户还没有SSH密钥,您可以继续下一步为当前用户生成SSH密钥对。
否则,如果您拥有SSH密钥对,则可以使用这些SSH密钥。如果你不再使用这些SSH密钥,则可以使用ssh-keygen
命令重新生成并覆盖元原来的SSH密钥。
以下ssh-keygen
命令将使用您的电子邮件地址作为注释。并生成4096位的SSH密,你也可以不使用任何参数运行ssh-keygen
:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
系统将提示您指定id_rsa
和id_rsa.pub
文件存储位置,一般情况我们不想要更改这个,这是SSH默认存储目录。
当你使用个ssh
命令时,ssh会在~/.ssh
目录中搜索密钥对的私有密钥,并使用该私钥与对等方的公钥进行解密,如果通过即可登录或者执行指定操作。
Enter file in which to save the key (/home/myfreax/.ssh/id_rsa):
按Enter
接受SSH设置默认位置存储id_rsa
和id_rsa.pub
文件。
接下来,系统会要求您输入安全密码。是否要使用安全密码,由您自己决定。密码短语将增加额外的安全性。
但是当你为SSH的密钥对设置密码后,你将不能配置SSH的无密码登录,SSH会要求你输入安全密码,才可以登录到远程服务器。
在实际使用的情况下很多使用案例都是不需要安全密码,请按Enter
跳过安全密码的设置。
Enter passphrase (empty for no passphrase):
下面是生成SSH密钥ssh-keygen
命令的整个互动过程,输出将如下所示:
Generating public/private rsa key pair.Enter file in which to save the key (/home/myfreax/.ssh/id_rsa):
Created directory '/home/myfreax/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/myfreax/.ssh/id_rsa
Your public key has been saved in /home/myfreax/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:sJexZ03nSundZOBoPH5NtNBu34m4yZNvrPLND0wlK7U [email protected]
The key's randomart image is:
+---[RSA 3072]----+
| |
| . |
| . . .+oo.|
| o + +.*Bo.|
| . S o.OEo++|
| . o ==+o*+|
| .*+o.=|
| ..o=+. |
| o*=+.. |
+----[SHA256]-----+
至此,SSH密钥已经生成,你可以使用cat
命令查看SSH密钥对id_rsa
和id_rsa.pub
文件内容,已确定SSH密钥是否已经生成。注意,为了你的服务器或者计算机的安全,请不要随意公开你的SSH私钥。
以下cat
命令将会打印SSH密钥对的公钥字符串:
cat ~/.ssh/id_rsa.pub
SSH密钥对的公钥内容输出将如下所示:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDHbT9iN4sRIX9dheyis21kol68osdso/rDdHDszHMQnH5xmjRBjHoAS7bRyYc5nA8oKdxqcPse9vRcm4WuWahuJzxSdrxnQWkk8kyp8WjaKKPRocN8e0k6D29FfeunNH/vUP2HQgw0h6hgsGgFEnAYxujb2syrY8214IKL7gQiQj8qaYV82+OwFzDIHzodWWSRaB/vqas50YvFgZNa8F8TW+HQtO3tXc3ClZDfnDr3cZn4s3Kdfl2/YWtKSgpW8mRvIKsV0hsFUICuuOjKwFfPuZ2oKzLzdoIEF9idHQ7d0agRRvH1w6g8rjy7r4QRG9lEkndgkqVNCVRg15izmbRuhxr+V8KWBGFyPGRkGQjxni377OIbrZWWuGTuILdZALwagushBSvBk0PYQLmgRSchzWdoSSPJzVvvJ4Rcoz+EX7ZFV7Sjaxo8zIJfGpJgb0RAhOB4YrxundzQtFVic1rbUX6ufUHeoSIwMMIaasxrYJfI3ogshSI52ipmlXdogaM= [email protected]
现在您已在CentOS客户端计算机上成功生成SSH密钥对。
配置SSH无密码登录
现在你已生成SSH密钥对,下一步是将公钥复制到要管理的服务器。将公钥复制到远程服务器的最简单和建议的方法是使用ssh-copy-id
命令。
如果你更改了SSH密钥对的存储位置,在运行ssh-copy-id
命令时,你需要指定SSH密钥对的公钥的绝对路径。ssh-copy-id
命令默认u复制~/.ssh/id_rsa.pub
公钥到远程服务器
在本地计算机终端中运行以下ssh-copy-id
将SSH公钥复制到远程服务器:
ssh-copy-id [email protected]_ip_address
ssh-copy-id
命令将要求您输入远程服务器的用户的密码:
[email protected]_ip_address's password:
如输入的密码正确,用户将会通过身份验证,公钥文件~/.ssh/id_rsa.pub
的内容将追加到远程用户~/.ssh/authorized_keys
文件中。
ssh-copy-id
命令将会退出并提示使用ssh '[email protected]_ip_address'
命令登录到远程服务器。
Number of key(s) added: 1Now try logging into the machine, with: "ssh '[email protected]_ip_address'"
and check to make sure that only the key(s) you wanted were added.
如果本地计算机上没有ssh-copy-id
命令,请使用以下命令复制公钥到远程服务器。这是一个简单脚本它组合了管道和重定向等操作符实现复制公钥到服务器:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
0
SSH密钥登录
完成上述步骤后,您应该能够在不输入密码登录到远程服务器。要进行验证,请尝试通过SSH登录到服务器。
如果您尚未设置SSH私钥的安全密码,则会立即登录。否则,将要求您输入SSH密钥的安全密码。注意不是你的远程服务器用户的密码。
ssh-keygen -t rsa -b 4096 -C "[email protected]"
1
禁用SSH密码登录
要为远程服务器添加额外的安全层,您可以禁用SSH使用密码的身份验证方式。即在运行ssh命令时不能使用输出密码登录。
继续之前,请确保您在使用无密码登录时的用户具有的sudo权限。这一点非常重要,否则你无法切换到root用户执行高权限的命令。
如需禁用SSH密码的身份验证,请执行以下步骤,首先使用ssh
命令客户端登录到远程服务器:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
1
然后请使用你喜欢的文本编辑器修改文件/etc/ssh/sshd_config
,在本教程中我们将使用vim编辑器打开文件/etc/ssh/sshd_config
。
请以root或具有sudo权限的用户运行以下vim
命令修改文件/etc/ssh/sshd_config
。
ssh-keygen -t rsa -b 4096 -C "[email protected]"
3
分别将PasswordAuthentication
/ChallengeResponseAuthentication
/UsePAM
配置选改为no
,这将禁用三种SSH身份验证方式,分别是密码,有挑战性的验证,PAM。
你可以使用vim的搜索命令找到这些配置项并改为no
:
完成文件的编辑后,保存文件并退出vim编辑器,然后使用以下systemctl
命令重新启动SSH服务:
ssh-keygen -t rsa -b 4096 -C "[email protected]"
5
此时,基于密码的SSH身份验证已禁用,你将不能再以使用密码的方式登录到服务器。
结论
我们向您展示了如何生成SSH密钥对以及如何设置基于SSH密钥的身份验证。您可以使用同一密钥来管理多个远程服务器。您还了解了如何禁用SSH密码身份验证。
默认情况下,SSH监听端口22。更改默认的SSH端口可降低自动攻击的风险。为了简化您的工作流程,请使用SSH配置文件定义您的所有SSH连接。
如果您有任何问题或反馈,请随时发表评论。
还没有评论,来说两句吧...