配置用户只能通过 ssh 公钥登录服务器

要在现有的服务器上创建一个新的用户 demo,并且配置该用户只能通过 SSH 公钥登录,不能使用密码登录,可以按照以下步骤操作:

创建新用户 demo

首先,使用 root 用户或具有管理员权限的用户登录服务器。

创建一个新的用户 demo

sudo useradd -m demo

这个命令会创建一个名为 demo 的新用户,并为该用户创建一个主目录(/home/demo)。

创建 .ssh 目录并设置权限

demo 用户创建 .ssh 目录,并设置正确的权限:

sudo mkdir /home/demo/.ssh
sudo chmod 700 /home/demo/.ssh

将公钥添加到 authorized_keys

demo 用户的公钥添加到 ~/.ssh/authorized_keys 文件中。如果你已经在客户端生成了 SSH 公钥,使用以下命令将公钥复制到服务器:

  1. 将客户端的公钥文件(通常是 ~/.ssh/id_rsa.pub)复制到服务器。如果在本地已有公钥,可以手动将其复制到 /home/demo/.ssh/authorized_keys 文件中。

  2. 使用命令将公钥添加到 authorized_keys 文件中:

    sudo echo "your-public-key-content" >> /home/demo/.ssh/authorized_keys
    sudo chmod 600 /home/demo/.ssh/authorized_keys

    其中,your-public-key-content 是你客户端生成的公钥内容。你可以直接复制公钥内容并粘贴到文件中。

配置 SSH 只允许公钥认证

修改 SSH 配置文件 /etc/ssh/sshd_config,确保如下配置项:

  1. 禁用密码认证:

    PasswordAuthentication no
  2. 启用公钥认证(通常默认启用,但可以确认):

    PubkeyAuthentication yes
  3. 确保没有启用其他认证方式,如挑战响应:

    ChallengeResponseAuthentication no

配置 demo 用户的 SSH 登录权限

为了确保 demo 用户只能通过 SSH 登录并且仅限于公钥方式,你还可以通过限制 demo 用户的 SSH 配置来进一步加强安全性。例如,使用 ForceCommand 强制指定命令或限制用户的 shell。

/etc/ssh/sshd_config 中添加如下内容来确保 demo 只能通过 SSH 登录,且不允许其他方式的登录:

Match User demo
    PasswordAuthentication no
    ForceCommand /bin/bash

重启 SSH 服务

修改完配置文件后,重启 SSH 服务以使更改生效:

sudo systemctl restart sshd

测试 SSH 登录

最后,使用 demo 用户的 SSH 密钥对从客户端进行登录,确保配置正确:

ssh demo@your_server_ip

如果一切配置正确,你应该能够使用公钥方式登录,而无法使用密码登录。

总结

这样就完成了只允许通过 SSH 公钥登录的配置,且用户 demo 无法使用密码登录。