当尝试通过 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).pubWindows狂魔看这里:
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完成以上步骤后,应该能够使用公钥身份验证成功登录到目标服务器啦