Linux 服务器使用 ssh 密钥登录

背景

我们平时登录云服务器都是直接输入 IP、账号、密码进行登录,这种方式当是你自己的服务器的时候就没什么关系。

但是如果在企业中,当员工人数日渐增多时,又需要给后端开放测试服务器、或正式服务器的权限时。

不得不面临的一个问题就是当其中一个员工离职时,需要修改服务器的密码。

这样就会变得有些繁琐和麻烦。

所以这次就来配置使用 ssh 密钥来登录服务器,员工在自己的本机上生成密钥和公钥,然后将公钥发给领导在服务器上配置好。

员工使用本地的密钥登录服务器。

当员工离职时,只需要在服务器上将这个员工的公钥删除就可以了。

SSH 支持各种身份验证机制。最常见的两种是基于密码和基于公钥的身份验证。公钥的身份验证是基于数字的签名,并且比传统的密码身份验证更安全,更方便。

这里我们就是使用基于公钥的身份验证。

操作

1. 本地生成密钥和公钥

生成 SSH 密钥的命令是 ssh-keygen。你可以不使用任何参数直接生产 SSH 私钥与公钥。也可以使用您的电子邮件地址作为注释来生成新的 4096 位 SSH 密钥对。

ssh-keygen #在你的本地计算机生成ssh密钥

ssh-keygen -t rsa -b 4096 -C "[email protected]"

系统将提示您指定文件名 Enter file in which to save the key (/home/myfreax/.ssh/id_rsa):。默认位置和文件名应该适合大多数用户。 按 Enter 接受并继续

接下来,系统会要求您输入安全密码或者称为密码短语 Enter passphrase (empty for no passphrase):。密码短语增加了一层额外的安全性。

如果您设置密码短语,则每次使用该密钥登录到远程计算机时,系统都会提示您输入密码短语。如果您不想设置密码短语,请按 Enter。

如果你没有什么特别的要求你在运行 ssh-keygen 命令,全部直接回车 Enter 键使用默认值创建 SSH 密钥即可。

要验证是否生成了新的 SSH 密钥对,请运行命令 ls ~/.ssh/id_* 查看 SSH 密钥是否存在。如果存在说明您已经在 CentOS Linux 计算机成功生成了 SSH 密钥。

/home/myfreax/.ssh/id_rsa 
/home/myfreax/.ssh/id_rsa.pub
2. 将公钥复制到远程服务器

现在您本地 CentOS 计算机有了 SSH 密钥,下一步是将公用密钥复制到要管理的远程服务器。

将公钥复制到服务器的最简单和建议的方法是使用 ssh-copy-id 命令。运行命令 ssh-copy-id server_username@server_ip_address 即可复制远程服务器。

server_username 是远程服务器用户的名称,server_ip_address 是你的服务器 IP 地址。系统将提示您输入远程用户密码。

通过身份验证后,公钥 ~/.ssh/id_rsa.pub 将追加到远程用户 ~/.ssh/authorized_keys 文件中,然后 ssh-copy-id 将会退出。

并且提示你可以运行命令 ssh 'username@server_ip_address' 登录到远程服务器。

ssh-copy-id remote_username@server_ip_address
remote_username@server_ip_address's password:

如果由于某些原因您的本地计算机上没有 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"
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.
3. 修改服务器 sshd_config 配置文件

要允许使用密钥(公钥 / 私钥)登录,需要修改 /etc/ssh/sshd_config 文件中以下几个配置:

将 PubkeyAuthentication 设置为 yes,表示启用公钥认证方式。

将 AuthorizedKeysFile 设置为存储公钥的路径和文件名,例如:AuthorizedKeysFile ~/.ssh/authorized_keys,表示公钥文件存储在当前用户的 .ssh 目录下的 authorized_keys 文件中。

将 PasswordAuthentication 设置为 no,表示禁用密码认证方式,只允许使用公钥认证方式登录。这样可以增加系统的安全性。

修改完以上配置后,需要重启 sshd 服务,以使配置生效。可以使用以下命令重启 sshd 服务:

sudo systemctl restart sshd

完成上述步骤后,您应该能够免密码登录到远程服务器。要测试它,请尝试通过 SSH 登录到服务器。

如果您尚未设置私钥的密码短语,则会立即登录。 否则,将提示您输入密码。

ssh remote_username@server_ip_address

禁用 SSH 密码身份验证

禁用密码身份验证会为服务器增加一层安全保护。在禁用 SSH 密码身份验证之前,请确保您可以免密码登录服务器,并且你登录用户具 sudo 权限。

首先登录到您的远程服务器,然后使用你喜欢的文本编辑器打开 SSH 配置文件 /etc/ssh/sshd_config。在本教程中,我们将使用 vim 打开文件。

使用 vim 搜索 PasswordAuthentication,ChallengeResponseAuthentication,UsePAM 指令并改为 no。

完成后,保存文件并运行命令 sudo systemctl restart sshd 重新启动 SSH 服务。此时,基于密码的身份验证已被禁用,你将不能使用密码登录。

注意:禁用密码登录后,请保管好你的 SSH 密钥文件,如果 VPS 提供商提供 VNC 远程控制可以很容易恢复,如果没有就………。

ssh sudo_user@server_ip_address=
sudo vim /etc/ssh/sshd_config #在你的服务器上
sudo systemctl restart sshd #在你的服务器上
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

结论

我们向您展示了如何生成 SSH 密钥对以及如何设置基于 SSH 密钥的身份验证。您可以使用同一密钥来管理多个远程服务器。您还了解了如何禁用 SSH 密码身份验证。

默认情况下,SSH 监听端口 22。更改默认的 SSH 端口可降低自动攻击的风险。为了简化您的工作流程,请使用 SSH 配置文件定义您的所有 SSH 连接。

问题

在实际操作中可能会有把以上所有的步骤都走完后,发现还是无法通过 ssh 密钥登录的情况。

这种情况一般都是因为文件的所属用户或文件的权限不对导致的。

  1. 查看本地的 ~/.ssh/id_rsa 文件的权限是否是 600 (即只有当前用户可以读写该文件),通过 chmod 600 ~/.ssh/id_rsa 命令赋予权限。

  2. 查看服务器中的 /root/.ssh/authorized_keys 是不是 600 权限。

  3. 查看服务器中的 /root 目录的所属用户是不是 root,使用 chown root:root /root 对该目录更改所属用户。

番外

如何对本地已有的 id_rsa 密钥设置密码?
您可以使用以下命令对本地已有的 id_rsa 密钥设置密码:

ssh-keygen -p -f ~/.ssh/id_rsa

命令中的 -p 参数表示修改密码,-f 参数指定要修改密码的密钥文件。执行命令后,系统会提示您输入旧密码(如果有的话),然后要求您输入新密码两次以确认。完成后,您的 id_rsa 密钥文件就被加密了。下次使用该密钥时,需要输入密码才能使用。

如何去除密码?
如果您想要去除本地已有的 id_rsa 密钥的密码,可以使用以下命令:

ssh-keygen -p -f ~/.ssh/id_rsa -P <old_password> -N ""

命令中的 -p 参数表示修改密码,-f 参数指定要修改密码的密钥文件,-P 参数指定原来的密码,-N 参数指定新的密码。在这个命令中,我们将新密码设置为空字符串,这样就相当于去除了原来的密码。

执行命令后,系统会提示您输入旧密码(如果有的话),然后将新密码设置为空字符串。完成后,您的 id_rsa 密钥文件就被去除了密码。下次使用该密钥时,无需输入密码即可使用。

转载 https://learnku.com/articles/76375

你可能感兴趣的:(Linux,服务器,linux,ssh)