无法 SSH 权限被拒绝公钥

无法 SSH 权限被拒绝公钥

我将尽可能详细地总结这一点。昨晚,我按照 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.我之前提到的消息还有更多内容。另外,有没有想过重启服务器?听起来很奇怪,但也许像防火墙之类的东西被重新加载了,然后一切都正常了。

相关内容