如何在RHEL 8上设置SSH密钥

时间:2020-01-09 10:39:44  来源:igfitidea点击:

如何为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