配置用户只能通过 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 公钥,使用以下命令将公钥复制到服务器:
将客户端的公钥文件(通常是
~/.ssh/id_rsa.pub)复制到服务器。如果在本地已有公钥,可以手动将其复制到/home/demo/.ssh/authorized_keys文件中。使用命令将公钥添加到
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,确保如下配置项:
禁用密码认证:
PasswordAuthentication no启用公钥认证(通常默认启用,但可以确认):
PubkeyAuthentication yes确保没有启用其他认证方式,如挑战响应:
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
如果一切配置正确,你应该能够使用公钥方式登录,而无法使用密码登录。
总结
- 创建用户
demo。 - 为用户配置
.ssh目录及authorized_keys文件,存入公钥。 - 修改 SSH 配置,禁用密码认证,仅允许公钥登录。
- 重启 SSH 服务并测试登录。
这样就完成了只允许通过 SSH 公钥登录的配置,且用户 demo 无法使用密码登录。