客户端配置

客户端配置

我有一个 Digital Ocean droplet,我正尝试授予自己 ssh 访问权限。我不确定之前对它做了什么。我尝试通过 Digital Ocean UI 添加我的公钥。这没有用,我一直收到permission denied (publickey)

我通过 Digital ocean 控制台访问了服务器,并手动将我的公钥添加到/root/.ssh/authorized_keys。然后我尝试使用 ssh 。但这没有用(权限被拒绝)。ssh [email protected]

因此,我尝试添加一个新用户,并创建了具有目录本身和文件权限/home/me/.ssh的目录。然后我尝试了。但还是没用。700.ssh600authorized_keysssh [email protected]

重新启动 ssh 守护进程也不会改变任何东西。

我错过了什么?

编辑:

这是详细的 ssh 输出。

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

编辑2:

LogLevel DEBUG3输出:

在此处输入图片描述

答案1

客户端配置

设置~/.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以便可以执行以下命令:githubgithub.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
    • 公钥。这是您存储在服务器上用于进行身份验证的信息。

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


服务器配置

大多数安装都会启用公钥身份验证。但是,如果你开始胡乱操作,可能会遇到一些问题。对于 OP 遇到的问题,我建议 OP 删除目录/root/.ssh/重新开始。

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

使用以下方式将密钥添加到主机ssh-copy-id

无论您决定创建另一个用户并ssh以该用户或根用户身份使用,以下都是ssh在服务器上放置密钥的推荐方法:

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

这允许sshd创建具有所需权限的目录和文件。这意味着您完全不会弄乱权限或需要记住详细信息。只需使用该工具上传密钥即可。

禁用密码验证

话虽如此,一旦您输入了密钥并验证能够使用密钥进行连接,建议您禁用密码验证sshd并重新启动服务:

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

那么新用户呢?

如果禁用密码验证,如何为新用户输入密码?一种方法是将模板文件添加到目录中/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

运行此命令时,使用另一个终端尝试登录。很多时候提供的消息足以帮助查明问题,或在线找到解决方案。

答案2

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 密钥的条目之外,您还可以在 ~/ssh/config 文件中定义不使用 ssh 密钥的 ssh 登录,例如:

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

这对我来说很好。还可以定义在命令行上使用哪个键:

ssh -v [email protected] -i .ssh/id_rsa

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

答案3

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

PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys

还要检查配置文件,看看是否允许用户或者允许群组已经设置,因为它们分别充当用户和组的白名单。

另外,我注意到您正在尝试为 root 用户添加密钥。默认情况下,root 登录应被禁用,但您也可以通过以下方式更改此设置:允许Root登录场地。

答案4

我最终重新安装了系统,openssh-server问题终于解决了。给出的解决方案都很棒,但对我来说却不起作用。我不知道是什么导致了这个问题,但我认为之前的开发人员可能弄乱了配置,把事情搞得一团糟。

我怀疑是否有人会遇到和我一样的具体问题。但是,如果您有 Digital Ocean droplet,但无法获得 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 进入您的服务器。

相关内容