如何在RHEL 8上设置SSH密钥
如何为RHEL(Red Hat Enterprise Linux)8服务器配置基于SSH公钥的身份验证?
说明:SSH是安全Shell的首字母缩写。
它是一套加密网络协议。
它允许用户通过不安全的网络(例如Internet)登录并安全地传输文件。
OpenSSH是RHEL 8上SSH协议的实现。
您可以使用RHEL 8用户和密码帐户登录。
但是,OpenSSH项目建议使用私有和公共SSH密钥的组合登录。
为我们的RHEL 8服务器设置的示例
其中:
- 您在Linux/Unix/macOS桌面上生成密钥对。
- 将公钥放置在RHEL 8服务器上。
- 借助ssh命令,您可以使用存储在桌面上的私钥来解锁公钥。
- 当公钥和私钥均正确时,您无需密码即可登录。
如何在RHEL 8服务器上设置SSH密钥?
在Red Hat Enteprise Linux 8服务器上设置SSH密钥的过程:
- 在本地桌面上,执行:ssh-keygen
- 使用以下命令将公钥安装到远程RHEL 8服务器中:ssh-copy-id user @ remote-RHEL8-server-ip`
- 使用ssh进行少密码登录:ssh user @ remote-RHEL8-server-ip
让我们详细了解所有命令和步骤。
如何创建ed25519或RSA密钥对
语法为:
ssh-keygen -t ed25519 ssh-keygen -t rsa ssh-keygen -t rsa -b 4096 -f ~/.ssh/aws-lighsail.key -C "My AWS SSH Keys" ssh-keygen -t ed25519 -f ~/.ssh/linode-usa-www1-vps.key -C "My Linode SSH Keys for www"
其中:
- -t rsa或-t ed25519:指定要创建的密钥的类型。 SSH协议版本2的可能值dsa,ecdsa,ed25519或rsa。
- -b 4096:指定要创建的密钥中的位数。
-f~/.ssh/aws-lighsail.key
:指定密钥文件的文件名。- -C -C"我的AWS SSH密钥":设置一个新注释。
我要在Ubuntu桌面上执行以下命令来创建密钥对:
$ ssh-keygen -t ed25519
我的Ubuntu Linux桌面上的示例SSH密钥生成过程
我强烈建议您在出现提示时设置密码。
如何复制公钥
现在,我们的已付款密钥已生成并存储在~/.ssh /目录中。
您必须将名为~/.ssh/id_ed25519.pub的公用SSH密钥文件(如果创建了RSA密钥,则应将~/.ssh/id_rsa.pub复制)复制到RHEL 8服务器。
尝试按以下方式使用ssh-copy-id命令:
$ ssh-copy-id -i ~/.ssh/fileNameHere.pub user@remote-RHEL8-server-ip
例如:
$ ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
使用ssh-copy-id
如何在没有密码的情况下使用ssh登录
现在,尝试使用ssh命令登录计算机,如下所示:
$ ssh user@rhel-8-server $ ssh [email protected]
您应该无需密码即可登录。
如果您设置了密码,请按以下步骤为当前会话解锁密码,这样就不必在每次运行ssh,sftp,scp,rsync和其他命令时都输入密码:
$ ssh-agent $SHELL $ ssh-add
root用户的可选设置
禁用root用户通过ssh在RHEL 8上一起登录。
以root用户身份登录RHEL 8并运行以下命令,将名为Hyman的用户添加到wheel组:
# usermod -aG wheel Hyman # id Hyman
允许组轮中的用户可以使用sudo命令在RHEL 8服务器上运行所有命令。
接下来,通过将以下行添加到sshd_config来禁用root用户登录:
# vi /etc/ssh/sshd_config
禁用root登录密码,仅允许基于ssh密钥的登录:
PermitRootLogin no ChallengeResponseAuthentication no PasswordAuthentication no UsePAM no
保存并关闭文件。
重新加载ssh服务器:
# systemctl reload sshd.service