即使将公钥添加到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
在这个例子中,我们设置了digitaloceanbox
和github
以及github.com
以便我们可以执行以下命令:
-
ssh github
-
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
),它允许我轻松识别远程机器上的键。
这将创建两个文件:
-
.ssh/digitalocean-rsa
- 私钥。 绝不分享这个 。
-
.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
密钥的推荐方法:
-
ssh-copy-id -i /home/user/.ssh/digitalocean-rsa.pub user@digitaloceanbox
这允许sshd
创建所需权限所需的目录和文件。 这意味着你没有机会搞砸权限或需要记住细节。 只需使用该工具上传密钥即可。
禁用密码validation
话虽这么说,一旦你自己键上并确认你能够使用密钥连接,建议你在sshd
禁用密码validation并重启服务:
- 编辑
/etc/ssh/sshd_config
-
PasswordAuthentication no
-
sudo systemctl restart sshd
新用户怎么样?
如果禁用密码validation,如何键入新用户? 一种方法是将模板文件添加到/etc/skel
目录。 键入一个用户后,请执行以下操作:
-
sudo cp -r .ssh/ /etc/skel/
-
ls /etc/skel/.ssh
- 编辑在
/etc/skel/.ssh/
找到的任何文件,使它们为空,除非您想为每个新创建的用户自动键入自己。
当您使用sudo useradd -m newuser
创建新用户时,该用户将拥有.ssh/authorized_keys
,您可以编辑它并具有适当的权限。
调试
您可以查看sshd
日志文件以查看连接失败或被拒绝的原因:
-
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
还要检查配置文件以查看是否已设置AllowUsers或AllowGroups ,因为它们分别充当用户和组的白名单。
此外,我注意到您正在尝试向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。