root
我有一个 VPS,正在通过 SSH 密钥登录。
user1
现在,我使用该命令创建了另一个用户adduser
并为其分配了密码。但是,每当我尝试通过winSCP
使用登录服务器时user1
,我仍然会收到错误,提示我需要输入私钥,但无法使用用户 1 的密码登录。
我的问题如下:
- 用户是否可以通过这两种方法登录?即使用 SSH 密钥和密码?
- 如果使用SSH,系统所有用户是否必须使用密钥才能登录?
答案1
/etc/ssh/sshd_config
您可以像本答案末尾的示例一样,为文件上的特定用户添加规则。但在这之前请注意,允许通过 SSH 密码登录有点不安全就服务器可能遭受的暴力攻击而言。因此,最安全的方式是在 VPS 或另一台 Linux 机器上使用以下行创建另一个 SSH 密钥。最好在开始使用以下命令之前切换到该机器上的 user1。su - user1
(注意:您应该切换到要创建密钥对的目录,因为-f
路径很难处理):
ssh-keygen -t rsa -C "[email protected]" -f user1_key
用户可以稍后通过将密钥对复制到 VPS 或另一台 Linux 计算机上来自行更改密码:
ssh-keygen -p -f user1_key
然后将私钥(user1_key
)交给 user1,并将公钥()放在VPS 下user1_key.pub
的用户主目录中,然后将所有权更改为 user1,或者在执行此操作之前这样做,以防止在 user1 的主目录中出现不必要的错误所有权。~/.ssh/authorized_keys
su - user1
mkdir -p /home/user1/.ssh
cat user1_key.pub >> /home/user1/.ssh/authorized_keys
# The next line is only needed if you have done the two above as 'root'
chown -Rv user1:user1 /home/user1/.ssh
密钥对创建过程也可以在 Windows 上使用 WinScp 完成,请参阅这里以供参考。然后,您可能需要确保公钥和私钥具有正确的权限设置,即0600
针对用户私钥和0644
用户公钥。(注意:将密钥复制到 Windows 格式的 USB 记忆棒或驱动器会使密钥失去其设置的权限,因此您需要仔细检查。
但是,如果您确实希望让该用户能够通过密码登录,您可以更改以下行/etc/ssh/sshd_config
:
AllowUsers mainuser user1
并在最后添加以下内容:
仅启用密码:
Match User user1
PubkeyAuthentication no
PasswordAuthentication yes
为了同时启用:
Match User user1
PubkeyAuthentication yes
PasswordAuthentication yes
为了仅启用 ssh,您可以删除该部分或将其设置为:
Match User user1
PubkeyAuthentication yes
PasswordAuthentication no
您可以找到更多与问题无关但与 SSH 总体相关的阅读材料这里,请注意,有些信息是为 digital-ocean 指定的,但仍然有用。另请参阅命令手册ssh-keygen
页和命令手册ssh
页。
谢谢@Eliah-Kagan用于校对并提出修改和补充建议。