即使将公钥添加到authorized_keys也无法ssh

我有一个数字海洋液滴我试图给自己ssh访问。 我不确定之前做过什么。 我已经尝试通过Digital Ocean UI添加我的公钥。 这没用,我一直得到permission denied (publickey)

我通过Digital ocean控制台访问了服务器,并手动将我的公钥添加到/root/.ssh/authorized_keys 。 然后我尝试使用ssh root@xxxx 。 这没用(许可被拒绝)。

所以我尝试添加一个新用户,在.ssh目录本身上创建了/home/me/.ssh目录,权限为700 ,在authorized_keys文件上创建了600 。 然后我试着ssh me@xxxx 。 那也行不通。

重新启动ssh守护程序也不会改变任何内容。

我错过了什么?

编辑:

这是详细的ssh输出。

https://gist.github.com/jaesung2061/a37cfd68308414cede8abf7f0137daa9

编辑2:

LogLevel DEBUG3输出:

在此处输入图像描述

客户端配置

设置~/.ssh/config

ssh设置主机条目非常简单,可以省去很多麻烦。 这是一个例子:

 Host digitaloceanbox Hostname 111.111.111.111 User root PubKeyAuthentication yes IdentityFile /home/user/.ssh/digitalocean-rsa ForwardX11 yes Host github github.com Hostname github.com User git PubKeyAuthentication yes IdentityFile /home/user/.ssh/github-rsa ForwardX11 no 

在这个例子中,我们设置了digitaloceanboxgithub以及github.com以便我们可以执行以下命令:

  1. ssh github
  2. ssh digitaloceanbox

如果我们想以不同于配置文件中指定的用户身份登录,我们只需将user@置于开头:

  • ssh user@digitaloceanbox

生成ssh密钥

 ssh-keygen -t rsa -b 4096 -C user@homemachine Generating public/private rsa key pair. Enter file in which to save the key (/home/user/.ssh/id_rsa): /home/user/.ssh/digitalocean-rsa Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/user/.ssh/digitalocean-rsa Your public key has been saved in /home/user/.ssh/digitalocean-rsa.pub. The key fingerprint is: SHA256:p9PYE/tveF2n//bLbp3ogYDtMtYEC5ziQiPxeob6fbo user@homemachine 

请注意,我已经指定了ssh-keygen提示时要生成的私钥的完整路径。 我还定义了注释( -C ),它允许我轻松识别远程机器上的键。

这将创建两个文件:

  1. .ssh/digitalocean-rsa
    • 私钥。 绝不分享这个
  2. .ssh/digitalocean-rsa.pub
    • 公钥。 这是您存储在服务器上进行身份validation的内容。

当你提供你的ssh密钥时,请确保它是.pub版本!! 当您添加到~/.ssh/config ,请确保添加与您添加到系统的公钥相匹配的正确私钥。


服务器配置

大多数安装都将启用公钥validation。 如果你开始无所事事地开始做事,你可能会遇到一些问题。 在OP /root/.ssh/问题的地方,我建议OP删除/root/.ssh/目录以重新开始。

建议您不要使用ssh访问远程系统上的root用户。 建议您ssh到另一个用户,然后使用您的密码升级到root( sudo su - )。

使用ssh-copy-id向主机添加密钥

无论您是决定创建另一个用户并使用ssh作为该用户还是root用户,以下是在服务器上放置ssh密钥的推荐方法:

  1. ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox

这允许sshd创建所需权限所需的目录和文件。 这意味着你没有机会搞砸权限或需要记住细节。 只需使用该工具上传密钥即可。

禁用密码validation

话虽这么说,一旦你自己键上并确认你能够使用密钥连接,建议你在sshd禁用密码validation并重启服务:

  1. 编辑/etc/ssh/sshd_config
  2. PasswordAuthentication no
  3. sudo systemctl restart sshd

新用户怎么样?

如果禁用密码validation,如何键入新用户? 一种方法是将模板文件添加到/etc/skel目录。 键入一个用户后,请执行以下操作:

  1. sudo cp -r .ssh/ /etc/skel/
  2. ls /etc/skel/.ssh
  3. 编辑在/etc/skel/.ssh/找到的任何文件,使它们为空,除非您想为每个新创建的用户自动键入自己。

当您使用sudo useradd -m newuser创建新用户时,该用户将拥有.ssh/authorized_keys ,您可以编辑它并具有适当的权限。

调试

您可以查看sshd日志文件以查看连接失败或被拒绝的原因:

  1. sudo tail -f /var/log/auth.log

在运行此命令时,请使用其他终端尝试登录。 很多时候,所提供的信息足以帮助查明问题,或在线查找解决方案。

Ssh对使用ssh密钥的所有权,文件和目录权限非常挑剔。

〜/ .ssh /应该由所有者拥有并拥有700个权限。 〜/ .ssh / authorized_keys应归所有者所有,拥有600个权限。

因此,对于root:

 sudo chown root:root -R /root/.ssh/ sudo chmod 700 /root/.ssh/ sudo chmod 600 /root/.ssh/authorized_keys 

对于我的用户:

 sudo chown me:me -R /home/me/ sudo chmod 700 /home/me/.ssh/ sudo chmod 600 /home/me/.ssh/authorized_keys 

然后再试一次。

当然,您还应该检查/ etc / ssh / sshd_config是否允许root登录,或者只使用ssh密钥。

如果你有 :

 PasswordAuthentication no 

然后你可以设置:

 PermitRootLogin yes 

然后重启sshd:

 /etc/init.d/sshd restart 

然后再试一次。

请注意,使用ssh,即使为此使用ssh会话,也可以重新启动sshd守护程序.Openssh旨在处理它。

查看您上传的日志文件片段,您似乎正在使用MacOSX? 你能在那里创建一个新的ssh密钥吗?

此外,我在过去发现,当我的本地计算机上有多个私有ssh密钥供我的用户使用时,这有时会导致无法使用ssh远程登录。 为了解决这个问题,在〜/ .ssh / config文件中对本地计算机上的条目进行了很多帮助。 例如 :

 Host my-vps HostName my-vps-ip-address-here IdentityFile ~/.ssh/id_rsa-my-private-key-location User my-username-here 

之后尝试在本地计算机上的命令行:

 ssh -v my-vps 

使用ssh密钥时,除了使用ssh密钥的条目外,还可以在〜/ ssh / config文件中定义没有ssh密钥用法的ssh登录,例如:

 Host pi Hostname 192.168.1.111 Port 22 User pi PasswordAuthentication yes PreferredAuthentications password 

这对我来说很好。 也可以在命令行上定义要使用的键:

 ssh -v root@10.111.111.254 -i .ssh/id_rsa 

这可能会使调试更容易,并且在命令行上,这应始终在本地计算机上运行。

仔细检查ssh守护程序配置(应该在/etc/ssh/sshd_config )并检查:

 PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys 

还要检查配置文件以查看是否已设置AllowUsersAllowGroups ,因为它们分别充当用户和组的白名单。

此外,我注意到您正在尝试向root用户添加密钥。 默认情况下,应禁用root登录,但您也可以通过PermitRootLogin字段更改此值。

根据您链接的日志,我认为您在客户端没有找到私钥文件时遇到问题。

  • 首先检查本地机器上存在的文件~/.ssh/id_rsa ,并且是正确的_(如果你有更多)。

  • 检查.ssh文件夹权限(应该是drwx------ ,如果没有运行sudo chmod 700 ~/.ssh及其内容(应该是-rw------- ,如果没有运行sudo chmod 600 ~/.ssh/* 。 同样对远程计算机应用相同的权限。

此外,您可以尝试强制使用所需的私钥 ,使用-i参数直接将其提供给ssh

  • 您可以运行以下内容:

    ssh -i /path/to/your/private-key root@XXXX

    要么

    ssh -i ~/.ssh/id_rsa myRemoteUser@XXXX

您可以在ssh联机帮助页上获得更多信息(在终端上运行man ssh

另外请记住,如果您想以root用户身份登录,则必须在登录前启用root帐户,使用sudo passwd root或服务器管理工​​具为其创建passwd (Ubutntu默认情况下禁用root帐户) 。 您可以在Ubuntu Wiki上获得更多信息。

希望能帮助到你。

我最终重新安装openssh-server来解决这个问题。 给出的解决方案都很棒,但它们对我不起作用。 我不知道是什么导致了这个问题,但我认为之前的开发人员可能已经搞砸了配置并搞砸了很糟糕的事情。

我怀疑会有人像我一样有这样一个特定的问题。 但是,如果您有数字海洋小滴,则无法获得SSH访问权限,并且无法使用任何给定的解决方案,请通过Digital Ocean控制台运行这些命令来重新安装SSH服务器。 请注意这是一个破坏性的过程,将删除/etc/ssh/ (而不是您的.ssh目录)中的旧配置文件

 apt-get purge openssh-server apt-get autoremove apt-get autoclean apt-get install openssh-server 

假设您的ssh客户端/密钥是有序的,您应该能够SSH到您的服务器。

使用Digital Ocean上的Debian图像突然出现了这个问题。 不知何故,在简短的设置过程中,可能在我设置root密码时, /root的所有者被更改为用户debian 。 我在/var/log/auth.log看到以下内容:

Jul 26 20:58:17 docker sshd[12576]: Authentication refused: bad ownership or modes for directory /root

只需执行chown root:root -R /root解决了这个问题。

HTH

刚出现了类似的问题。 这对我有用 – 将此行添加到/ etc / ssh / sshd_config

 AuthorizedKeysFile %h/.ssh/authorized_keys 

然后以通常的方式重启ssh。