ssh会提示输入密码,尽管ssh-copy-id


28

我已经在远程服务器上使用公钥身份验证一段时间了,以用于远程Shell以及sshfs挂载。在强制卸载了sshfs目录后,我注意到ssh开始提示我输入密码。我尝试从任何提及的本地计算机上清除远程.ssh / authorized_keys,然后从对远程计算机的引用中清除了本地计算机。然后,我重复我的ssh-copy-id,它提示我输入密码,然后正常返回。但是瞧瞧,当我SSH到远程服务器时,仍然会提示我输入密码。我对问题可能是什么有些困惑,有什么建议吗?


1
serverfault.com/questions/208181/...我不知道是什么的跨站点重复StackExchange政策,但它不是在我看来,不交叉张贴问题将是有益的。
短暂

如果已检查仅可以写入~~/.ssh~/.ssh/authorized_keys,请运行ssh -vvv server.example.com并报告输出(如果需要,可以使主机名和用户名匿名)。如果您具有服务器的root用户访问权限,请查看尝试尝试公共密钥登录时创建的日志条目。
吉尔(Gilles)“所以,别再邪恶了”

Answers:


32

sshd对$ HOME,$ HOME / .ssh(两个目录)和$ HOME / .ssh / authorized_keys的权限感到奇怪。

我的一个Linux机器最终在$ HOME目录中获得了drwxrwxrwx权限。在我删除组的“ w”权限(其他位于我的$ HOME目录中)之前,Arch linux盒子绝对不会使用公共密钥登录。

尝试使$ HOME和$ HOME / .ssh /具有对group和other的更多限制权限。看看那是否不能让sshd发挥作用。


4
对。ssh-copy-id应该照顾的权限~/.ssh~/.ssh/authorized_keys,同时也确保你的home目录本身并非组可写。
吉尔(Gilles)“所以,别再邪恶了”,2010年

7
对我来说就是这样。我使用ssh-copy-id通过RSA密钥发送,但仍然收到提示。运行chmod g-w homedir在远程服务器上的工作就像一个魅力。
本·克里格


5

我最近也遇到了这个问题。

通过修改$HOME目录的权限进行了更正。但是,仅运行chmod g-w ~/并不能解决问题。此外chmod g-w ~/我还需要修改的权限others$HOME运行目录chmod o-wx ~/

一起:

chmod g-w ~/
chmod o-wx ~/

请注意,我不确定是否o-x有必要,只是出于预防目的而运行它。



0

在并行登录时是否也会出现问题,即,如果您尝试在打开ssh会话时挂载sshfs?如果没有,那么我猜您已经加密了主目录?在这种情况下$HOME/.ssh/authorized_keys,只有在您首次登录(使用密码)后才能在远程计算机上使用。

请查看https://help.ubuntu.com/community/SSH/OpenSSH/Keys#Troubleshooting以获得解释和所需的解决方法。


0

我将其发布为评论,但可能太长了。我只想添加一个ssh-copy-id尝试从文件夹/.ssh内的位置发送公钥的$HOME文件。

如果您尝试ssh使用公共密钥作为root用户(保存与安全性相关的注释),ssh-copy-id并且您的$HOME变量设置为除/root(例如)设置为普通用户的主目录以外的任何其他值,则可能尝试使用错误的公共密钥登录。),因为没有在远程系统上安装root的公钥,所以将提示root用户。

您可以使用以下单行代码指定确切的公钥:

pub="$(cat /root/.ssh/id_rsa.pub)"; ssh user@remotehost "echo $pub >> .ssh/authorized_keys; chmod 700 .ssh; chmod 600 .ssh/authorized_keys"

我在野外遇到了几次这种情况(包括今天早上),并想出2分钱,以防万一有人遇到同样的情况。


0

像提到的其他贡献者一样,这可能是权限问题。

最好的诊断方法是在调试选项打开的情况下重新启动远程服务器上的SSH守护进程-通常是“ -d”选项。OpenSSH守护程序消息非常明确。例如,您将看到以下消息:

Authentication refused: bad ownership or modes for directory /some/path

我不会将该消息称为“非常明确”。它很模糊地告诉您要查找的内容(所有权和权限不正确),但不告诉您要检查哪个目录或文件,也不应该提供正确的设置。
Urhixidur

0

重新启动后公用密钥无法幸存的原因是我的服务器主目录已加密。(您在安装服务器时执行此操作)


0

另一个可能的问题是服务器不支持您的密钥算法。就我而言,我在sshd日志中发现了以下消息(/var/log/auth.log以我为例):

userauth_pubkey: unsupported public key algorithm: ssh-ed25519 [preauth]

在这种情况下,您要么需要在sshd配置中启用对该算法的支持(这可能需要更新到最新sshd版本),要么需要将密钥切换到sshd您尝试连接到的算法支持的算法。。


0

由于在搜寻该行为时这些问题会出现在第一个搜索结果中,因此我还将添加我的解决方案:

就我而言,这与权限无关。出于任何原因(当我找到一个快速修复程序时,我并没有费心找出实际上是出于哪个原因),在执行ssh命令时,程序没有寻找正确的标识文件。一种解决方案是在远程服务器上手动添加SSH密钥,SSH程序尝试使用该密钥。您可以通过在命令中添加-v来观察SSH程序在执行命令时的功能:

ssh -v username@your-host-ip-or-domain 

然后,您只需在本地计算机上抓取SSH程序尝试为其找到身份文件/私钥的任何公钥,例如在Mac上:

cat ~/.ssh/id_rsa.pub

...,然后将其添加到远程服务器的authorized_keys文件中:

~/.ssh/authorized_keys

在我的情况下,另一个更好的解决方案是在本地ssh配置文件中添加自定义主机。在我的Mac上是:

/Users/my-user-name/.ssh/config

例如,您可以在此处添加如下内容:

Host mynewserver
        HostName some.IP.number.or.domain
        Port 20000 #if custom port is used and not the default 22
        User the_root
        PreferredAuthentications publickey
        IdentityFile ~/.ssh/id_rsa_for_my_new_server

然后,您只需要执行:

ssh mynewserver

...和Voilà

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.