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
设置您的客户
- 生成你的密钥
-
ssh-keygen
-
- 配置ssh以使用密钥
-
vim ~/.ssh/config
-
- 将密钥复制到您的服务器
-
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
以确保ssh
在IdentityFile
validation期间使用IdentityFile
而不使用其他密钥文件,这可能会导致问题并且不是一种好的做法。
故障排除
- 使用“-vvv”选项
- 确保服务器具有您的PUBLIC密钥(.pub)。
- 确保您的IdentiyFile指向您的私钥。
- 确保你的.ssh目录有700个,你的文件有700个权限(rwx ——)。
-
tail -f /var/log/auth.log
(在服务器上)并在您尝试登录时监视错误 - 如果您有许多密钥文件,请尝试使用
IdentitiesOnly yes
来限制身份validation以使用单个指定密钥。
有时问题来自权限和所有权。 例如,如果要以root身份登录, /root
, .ssh
和authorized_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_conf
的AllowedUsers
配置。 注意:列表是空格分隔的(不是以逗号分隔),因为我学到了很多困难。
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 + C或CRTL + 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)。
你应该去