SSH权限被拒绝(publickey)

我曾尝试搜索以前的问题以获得我的问题的答案,但之前建议的所有答案都不适用于我。

我试图从我的本地机器连接到linode(运行ubuntu 12.04 LTS)(也运行ubnutu 12.04 LTS)

我在本地计算机上创建了一个私钥和公钥,并将我的公钥复制到我的linode的authorized_keys文件中。 但是,每当我尝试ssh到我的linode时,我收到错误消息“Permission denied(publickey)。

在我的linode上如何设置ssh不是问题,因为我可以使用密钥身份validation从我的Windows机器上ssh到它。

在我本地ubuntu机器上的.ssh目录中,我有我的id_rsa和id_rsa.pub文件。 我是否需要在本地计算机上创建authorized_keys文件?

编辑:这是我运行ssh -vvv -i id_rsa [youruser] @ [yourLinode]时得到的

debug3: authmethod_lookup publickey debug3: remaining preferred: keyboard-interactive,password debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Offering RSA public key: id_rsa debug3: send_pubkey_test debug2: we sent a publickey packet, wait for reply debug1: Authentications that can continue: publickey debug2: we did not send a packet, disable method debug1: No more authentication methods to try. Permission denied (publickey). 

Pubkeyvalidation

设置您的客户

  1. 生成你的密钥
    • ssh-keygen
  2. 配置ssh以使用密钥
    • vim ~/.ssh/config
  3. 将密钥复制到您的服务器
    • ssh-copy-id -i /path/to/key.pub SERVERNAME

您的步骤2中的配置文件应该具有类似于以下内容的内容:

 Host SERVERNAME Hostname ip-or-domain-of-server User USERNAME PubKeyAuthentication yes IdentityFile ./path/to/key 

您可以添加IdentitiesOnly yes以确保sshIdentityFilevalidation期间使用IdentityFile而不使用其他密钥文件,这可能会导致问题并且不是一种好的做法。

故障排除

  1. 使用“-vvv”选项
  2. 确保服务器具有您的PUBLIC密钥(.pub)。
  3. 确保您的IdentiyFile指向您的私钥。
  4. 确保你的.ssh目录有700个,你的文件有700个权限(rwx ——)。
  5. tail -f /var/log/auth.log (在服务器上)并在您尝试登录时监视错误
  6. 如果您有许多密钥文件,请尝试使用IdentitiesOnly yes来限制身份validation以使用单个指定密钥。

有时问题来自权限和所有权。 例如,如果要以root身份登录, /root.sshauthorized_keys必须属于root。 否则,sshd将无法读取它们,因此无法判断用户是否有权登录。

在您的主目录中:

 chown -R your_user:your_user .ssh 

至于权利,使用700表示.ssh和600表示authorized_keys

 chmod 700 .ssh chmod 600 .ssh/authorized_keys 

您的客户端不需要authorized_keys

您必须告诉ssh-client实际使用您生成的密钥。 有几种方法可以做到这一点。 仅用于测试类型ssh -vvv -i .ssh/id_rsa [youruser]@[yourLinode] 。 每次要连接到服务器时,都必须提供密码。

如果可行,您可以使用ssh-add .ssh/id_rsa将密钥添加到ssh-agent (您只需为此提供一次密码,只要您不注销/重启就可以使用密码)

还要确保用户的主目录(在服务器上)实际上属于用户ssh’ing(在我的情况下设置为root:root)。

本来应该:

 sudo chown username:username /home/username; 

我遇到的问题是它在客户端上使用了错误的密钥。 我已将id_rsa和id_rsa.pub重命名为其他内容。 您可以将它们重命名为默认值,或者在发出ssh命令时,可以像这样使用它

 ssh -i ~/.ssh/private_key username@host 

还要在/etc/ssh/sshd_config检查PasswordAuthentication值,如果no将其更改为yes 。 不要忘记在此之后重启ssh服务。

我最近用我的网络服务器遇到了这个问题。

我通常会在~/.ssh/authorized_keys2所有服务器上保留一份授权​​密钥列表。 根据我的经验, sshd会查找~/.ssh/authorized_keys~/.ssh/authorized_keys2

对于我的网络服务器, /etc/ssh/sshd_config有这一行

 AuthorizedKeysFile %h/.ssh/authorized_keys 

代替

 AuthorizedKeysFile %h/.ssh/authorized_keys2 

我应用了后者,重新启动了我的ssh守护进程,并使用我的pubkey解决了使用ssh登录的问题。

我的情况,客户端是ubuntu 14.04lts,服务器是win 2012服务器运行cygwin。 当cygwin中的2012服务器目录是/ home / Administrator时,我正在使用’ssh administrator @ xxxx’。 所以它是区分大小写的,当我尝试’ssh Administrator @ xxxx’(注意管理员的资本A)然后它工作正常。

像“未找到用户”这样的错误消息会让我比“权限被拒绝(公钥,键盘交互)”更快地解决问题。

将常规用户(例如johndoe)公钥从cPanel Centos系统复制到AWS上的Ubuntu服务器时,我遇到了同样的问题。 正如上面的gertvdijk所建议的那样 ,我检查了/var/log/auth.log并且确定它已经Authentication refused: bad ownership or modes for directory /home/johndoe 。 当我试图将/home/johndoe/public_html设置为apache2的默认虚拟主机文件根(这也不是该任务所需)时,我错误地认为777’ed /home/johndoe

另请参阅此处和此处的答案

服务器只需要在.ssh/authorized_keys中拥有.ssh/authorized_keys ,而客户端(您正在处理的计算机)需要拥有私钥(.pem,或者如果使用带有Filezilla的SFTP,.ppk)

对于像我这样来自这个post的Putty用户,如果忘记添加用户user @ Ip,也可能会出现此错误!

其他人对密钥文件chmod的许可为600)

 ssh 1.1.1.1 -i /path/to/.pem file Permission denied (publickey).` ssh user@1.1.1.1 -i /path/to/.pem file 

这对我有用,修复不是我的,但我宁愿把它写下来以防其他人有同样的问题。

原作者在此发布: digital-ocean-public-access-key-denied

 sudo nano /etc/ssh/sshd_config 

替换它

 UsePAM yes IgnoreUserKnownHosts no PasswordAuthentication no 

有了这个

 UsePAM no IgnoreUserKnownHosts no PasswordAuthentication yes 

保存文件并重新启动ssh

 reload ssh 

ssh现在应该工作,要求输入密码

我遇到了与问题中描述的问题相同的问题。 客户端计算机上执行ssh -vvv -i id_rsa [youruser]@[yourLinode]的输出类似于问题中描述的输出。 我检查了其他答案中建议的所有文件和目录权限,它们是正确的。

事实certificate,当将生成的文件id_rsa.pub到服务器机器时,作为文件~username/.ssh/authorized_keys我从一开始就意外地省略了单词ssh-rsa 添加它解决了这个问题。

如果所有其他方法都失败了,请检查您的登录用户是否属于ssh的AllowedGroup。 也就是说,您的用户是服务器上/etc/ssh/sshd_config以下行所示的组的成员:

 AllowGroups ssh #Here only users of 'ssh' group can login 

另一个可能的原因可能是/etc/ssh/sshd_confAllowedUsers配置。 注意:列表是空格分隔的(不是以逗号分隔),因为我学到了很多困难。

 AllowUsers user1 user2 user3 

在我的情况下,问题是由旧机器上的.ssh目录复制引起的。 事实certificate我的旧SSH配置使用的DSA密钥已被弃用 。 切换到一对新的密钥,这次基于RSA,为我解决了这个问题。

如果您可以独立访问machineA和machineB(例如,从machineC),则以下方法可能有效。

如果ssh-copy-id不起作用,则可以禁用密码身份validation。 以下是一种解决方法

在machineB的授权密钥(即〜/ .ssh / authorized_keys)中拥有machineA的公钥将允许您从machineA ssh。 这也适用于scp。

使用以下命令生成密钥对后: ssh-keygen

machineA上 ,执行cat ~/.ssh/id_rsa.pub

样本输出:

ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA

复制打印的密钥( ⌘Command + CCRTL + C ),然后将其添加到machineB上的〜/ .ssh / authorized_keys文件中。

例如,在machineB上执行以下命令:

echo 'ssh-rsa AAAAB3NzaSGMFZW7yB anask@mahineA' >> ~/.ssh/authorized_keys

适用于Ubuntu 16.04。

问题出在sshd_config文件中

这是ULTIMATE解决方案:

以root用户身份登录到Ubuntu服务器

 vi /etc/ssh/sshd_config 

现在转到最底层,将值从“no”更改为“yes”。

它应该如下所示:

更改为no以禁用隧道明文密码

 PasswordAuthentication yes service sshd reload 

生效。

现在您可以使用LOCAL机器(也称笔记本电脑等)中的以下命令简单地使用一个键

所以打开新的终端窗口,不要登录服务器,只需输入以下命令:

ssh-copy-id john @ serverIPAddress

(用你的用户名替换john)。

你应该去