当尝试通过 SSH 登录服务器时,会出现 SSH 权限拒绝错误:(一般情况下只有root用户会这样?)

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

在 Permission denied 语句之后,括号里面包含了在连接启动时失败时尝试的身份验证方法。

出现该错误的一个原因可能是与 sshd_config 的配置有关,这个文件包含了 SSH 服务器的配置。另一种可能性是尝试使用的公钥没有被包含在目标用户的

~/.ssh/authorized_keys

文件里,这个文件包含了允许从 客户机 SSH 到远程服务器的公钥列表。因此,当此文件配置有误时就会导致“权限拒绝”错误。

解决 SSH Permission denied 问题: 启用密码身份验证 或者 配置公钥登录

允许密码登录

如果您想使用密码访问 SSH 服务器,修复 Permission denied 错误的解决方案是在 sshd_config 文件中启用密码登录。

要做到这一点,在文本编辑器中打开文件:

sudo nano /etc/ssh/sshd_config

在文件中,找到 PasswordAuthentication 行,并确保它以 yes 结尾。

在文件中,找到 ChallengeResponseAuthentication 选项,并通过添加 no 来禁用它。

如果行被注释掉了,删除 # 取消注释。

保存文件,然后通过输入以下命令重新启动 SSH 服务:( SYSTEMD )

配置公钥

这里假设要为远程计算机 localhost.hanahime.online 的用户 hanahime 配置公钥登录

先在本地计算机生成密钥对 >>>

(Windows狂魔需要在MSYS2或MinGW环境里的bash执行(git bash也是可以的))

# 如果提示 Saving key "~/.ssh/xxx" failed: No such file or directory
# 那说明需要使用 mkdir ~/.ssh && chmod 700 -R ~/.ssh 在家目录下面创建 .ssh 目录
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_$(whoami)_$(hostname) -C "<备注>"
# Generating public/private ed25519 key pair.  #这个是叫你去设置密钥的访问密码
# Enter passphrase (empty for no passphrase):  #如果要设置为空,直接按回车即可

如果Windows狂魔仍然希望用Cmd环境创建, 那就用

ssh-keygen -t ed25519 -f %USERPROFILE%\.ssh\id_ed25519_%USERNAME%_%USERDOMAIN% -C "<备注>"

吧(如果还没有 .ssh 文件夹Windows用

mkdir %USERPROFILE%\.ssh

然后去获取刚才生成的公钥,填入到远程计算机 >>>

cat ~/.ssh/id_ed25519_$(whoami)_$(hostname).pub

Windows狂魔看这里:

notepad %USERPROFILE%\.ssh\id_ed25519_%USERNAME%_%USERDOMAIN%.pub

假设获得的文件内容如下: (仅供参考)

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGTVUaZgyYFHuBri0gXUmEBwbtfpveas0JE8/n9eEtTh <备注>

现在登录到远程计算机

#同样的, 远程计算机还没 .ssh 文件夹的话,使用 mkdir ~/.ssh && chmod 700 -R ~/.ssh 在家目录下面创建 .ssh 目录
nano ~/.ssh/authorized_keys
#把上面获得的文件内容粘贴进去即可

#设置一下正确的文件权限
chmod 600 ~/.ssh/authorized_keys

修改 sshd_config 文件, 并重启 sshd >>>

在服务器上打开 sshd_config 文件并确保以下行已设置(如果需要,取消注释并修改):

sudo nano /etc/ssh/sshd_config

找到 PubkeyAuthentication 并确保其值为 yes(可选) 为了安全起见,可以禁用密码身份验证(如果你只想使用公钥登录):

PubkeyAuthentication yes
PasswordAuthentication no

保存文件,然后通过输入以下命令重新启动 SSH 服务:( SYSTEMD )

sudo systemctl restart sshd

完成以上步骤后,应该能够使用公钥身份验证成功登录到目标服务器啦