![无法 SSH 权限被拒绝公钥](https://linux22.com/image/1073280/%E6%97%A0%E6%B3%95%20SSH%20%E6%9D%83%E9%99%90%E8%A2%AB%E6%8B%92%E7%BB%9D%E5%85%AC%E9%92%A5.png)
我将尽可能详细地总结这一点。昨晚,我按照 Corey Schafer Python Django 的步骤将我的第一个 Django 网站部署到了 Linode 上的 Ubuntu (23.04) 服务器上。教程一切顺利,我按照视频教程设置了 SSH,大约 23-25 分钟,没有出现问题。我确认一切都在某个时刻正常工作。我退出了服务器,并确认我可以通过 SSH 重新登录,没有任何问题。继续下去,我又花了一两个小时配置了一堆其他东西,并确保网站在睡觉和退出服务器之前正常运行。今天我回去连接服务器,却收到一条消息Permission denied (publickey).
在我完成所有这些操作后,我意识到我添加了防火墙,我觉得我可能把自己锁定在了 ssh 连接之外。然而,在谷歌搜索后,我遇到了这个修饰符ssh -vT user@IP
,并很快发现它确实似乎在尝试通过 ssh 进行连接,并且建立了连接,但由于我不完全理解的原因,它只是失败了。
接下来,我尝试通过 Linodes Weblish 以 root 用户身份登录,并成功进入并尝试验证一些事情。
• 首先,我验证该位置是否存在一个文件夹/home/user/.ssh
,其中含有带有密钥的文件。
• 其次,我通过返回视频演示查看 ~/.ssh/ 文件夹及其内容来验证权限,然后再次运行以下两个命令sudo chmod 700 ~/.ssh/
。sudo chmod 600 ~/.ssh/*
结果如下,即我的主目录中的 ssh 文件夹。
lewpiper@django-server:~$ la -la
total 40
drwxrwxrwx 6 lewpiper lewpiper 4096 Jun 14 06:37 .
drwxr-xr-x 3 root root 4096 Jun 14 05:22 ..
-rw------- 1 lewpiper lewpiper 100 Jun 14 05:34 .bash_history
-rw-r--r-- 1 lewpiper lewpiper 220 Jun 14 05:22 .bash_logout
-rw-r--r-- 1 lewpiper lewpiper 3771 Jun 14 05:22 .bashrc
drwx------ 4 lewpiper lewpiper 4096 Jun 14 06:09 .cache
drwxrwxr-x 3 lewpiper lewpiper 4096 Jun 14 06:37 .local
drwxr-xr-x 8 lewpiper www-data 4096 Jun 14 06:36 Portfolio
-rw-r--r-- 1 lewpiper lewpiper 807 Jun 14 05:22 .profile
drwx------ 2 lewpiper lewpiper 4096 Jun 15 06:03 .ssh
-rw-r--r-- 1 lewpiper lewpiper 0 Jun 14 05:33 .sudo_as_admin_successful
以下是主目录中 ssh 文件夹内的文件的权限。
lewpiper@django-server:~/.ssh$ ls -la
total 12
drwx------ 2 lewpiper lewpiper 4096 Jun 15 06:03 .
drwxrwxrwx 6 lewpiper lewpiper 4096 Jun 14 06:37 ..
-rw------- 1 lewpiper lewpiper 749 Jun 14 05:32 authorized_keys
• 第三,我在服务器上设置了防火墙,当前允许的连接类型如下。
lewpiper@django-server:~$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
• 最后,我转到该/etc/ssh/sshd_config
文件,现在再次启用 PasswordAuthentication,直到我能彻底解决 ssh 问题。所以现在我可以登录,而不必使用 Linode 提供的 weblish。但是,执行此操作后,我尝试使用以下命令重新启动服务器上的 ssh 服务,sudo systemctl restart sshd
因为教程说您应该在编辑此文件时执行此操作。相反,出现了错误,Failed to restart sshd.service: Unit sshd.service not found.
我记得昨晚在设置服务器时也收到此消息,快速谷歌搜索发现服务的名称已更改,所以我尝试了一下,sudo systemctl restart ssh
昨晚似乎成功了,但我想知道我是否做错了。
下面是我现在拥有的 sshd_config 文件,但请注意,我确实将密码验证更改为是,以便我无需使用生成的 rsa 密钥即可登录,这是我的问题。
LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
#PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
#AuthorizedPrincipalsFile none
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
#PermitEmptyPasswords no
# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
KbdInteractiveAuthentication no
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the KbdInteractiveAuthentication and
# PasswordAuthentication. Depending on your PAM configuration,
# PAM authentication via KbdInteractiveAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and KbdInteractiveAuthentication to 'no'.
UsePAM yes
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
# no default banner path
#Banner none
# Allow client to pass locale environment variables
AcceptEnv LANG LC_*
# override default of no subsystems
Subsystem sftp /usr/lib/openssh/sftp-server
# Example of overriding settings on a per-user basis
#Match User anoncvs
# X11Forwarding no
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
问题:
所以我的问题分为两部分。第一,我是否错过了可以更好地排除这种情况发生原因的任何方法,或者我可以尝试什么?第二,如果没有其他推荐的故障排除方法,我是否应该尝试删除服务器上的 authorized_keys 文件并将其安全复制到服务器?请注意,我甚至不确定这是否会起作用,因为我不确定这是否是问题所在。我的直觉是我可能遗漏了一些东西,或者Failed to restart sshd.service: Unit sshd.service not found.
我之前提到的消息还有更多内容。另外,有没有想过重启服务器?听起来很奇怪,但也许像防火墙之类的东西被重新加载了,然后一切都正常了。