V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zzandlove
V2EX  ›  程序员

SSH 设置免密登录遇到的报错, Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

  •  2
     
  •   zzandlove · 2016-12-06 17:01:09 +08:00 · 39743 次点击
    这是一个创建于 2912 天前的主题,其中的信息可能已经有所发展或是发生改变。

    搞了一个 VPS ,想设置免钥登录,生成私钥和公钥之后,把"#PasswordAuthentication yes" 改成"PasswordAuthentication no" 之后就一直报这个错, Permission denied (publickey,gssapi-keyex,gssapi-with-mic). 搜索了下,权限都 OK , authorized_keys 600 和 644 都试了,.ssh 也是 700 ,就是没办法啊,老报错,求高手解决

    80 条回复    2019-09-27 17:44:22 +08:00
    lifanxi
        1
    lifanxi  
       2016-12-06 17:10:15 +08:00
    连 ssh 时加-vvv 参数,看具体的 Log 分析原因。
    maikcn
        2
    maikcn  
       2016-12-06 17:13:48 +08:00
    私钥的权限设置为 600 了吗? ~/.ssh/id_rsa
    indust
        3
    indust  
       2016-12-06 17:14:37 +08:00
    SELinux 问题? 试试 restorecon -r ~/.ssh
    zzandlove
        4
    zzandlove  
    OP
       2016-12-06 17:29:09 +08:00
    @indust 关闭了
    zzandlove
        5
    zzandlove  
    OP
       2016-12-06 17:29:26 +08:00
    @maikcn 设置了的
    zzandlove
        6
    zzandlove  
    OP
       2016-12-06 17:29:42 +08:00
    @lifanxi 怎么理解?菜鸟实在不懂 哈哈
    noobsheldon
        7
    noobsheldon  
       2016-12-06 17:36:17 +08:00
    vultr
        8
    vultr  
       2016-12-06 17:37:15 +08:00
    报这个错误,应该是你的公钥和私钥没有配对好。

    ssh user@ip -v

    看看具体报什么错误。
    zzandlove
        9
    zzandlove  
    OP
       2016-12-06 17:37:19 +08:00
    @noobsheldon 谢谢,这个看过,没用,哈哈
    noobsheldon
        10
    noobsheldon  
       2016-12-06 17:39:35 +08:00
    @zzandlove 你是什么系统啊
    BOYPT
        11
    BOYPT  
       2016-12-06 17:41:44 +08:00
    手工添加的 key 可以参考下我的脚本:

    https://coding.net/u/boypt/p/ptcoding/git/raw/master/bash/addkey.sh

    如果是 rh 系的要注意 selinux ,用命令

    restorecon -R -v $HOME/.ssh
    sunnyyj
        12
    sunnyyj  
       2016-12-06 17:43:43 +08:00
    前两天用 google cloud ,想改成 root 直接登录也遇到相同的问题
    改 sshd_config , PermitRootLogin yes ,重启 sshd 服务
    然后执行了几个命令,突然就好了,不知道对你有没有帮助
    chown -R root:root ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
    restorecon -r -vv ~/.ssh
    zzandlove
        13
    zzandlove  
    OP
       2016-12-06 17:45:58 +08:00
    @vultr

    penSSH_6.6.1, OpenSSL 1.0.1e-fips 11 Feb 2013
    debug1: Reading configuration data /root/.ssh/config
    debug1: Reading configuration data /etc/ssh/ssh_config
    debug1: /etc/ssh/ssh_config line 56: Applying options for *
    debug1: Connecting to 我的 IP [我的 IP] port 22.
    debug1: Connection established.
    debug1: permanently_set_uid: 0/0
    debug1: identity file /root/.ssh/id_rsa type 1
    debug1: identity file /root/.ssh/id_rsa-cert type -1
    debug1: identity file /root/.ssh/id_dsa type -1
    debug1: identity file /root/.ssh/id_dsa-cert type -1
    debug1: identity file /root/.ssh/id_ecdsa type -1
    debug1: identity file /root/.ssh/id_ecdsa-cert type -1
    debug1: identity file /root/.ssh/id_ed25519 type -1
    debug1: identity file /root/.ssh/id_ed25519-cert type -1
    debug1: Enabling compatibility mode for protocol 2.0
    debug1: Local version string SSH-2.0-OpenSSH_6.6.1
    debug1: Remote protocol version 2.0, remote software version OpenSSH_6.6.1
    debug1: match: OpenSSH_6.6.1 pat OpenSSH_6.6.1* compat 0x04000000
    debug1: SSH2_MSG_KEXINIT sent
    debug1: SSH2_MSG_KEXINIT received
    debug1: kex: server->client aes128-ctr [email protected] none
    debug1: kex: client->server aes128-ctr [email protected] none
    debug1: kex: [email protected] need=16 dh_need=16
    debug1: kex: [email protected] need=16 dh_need=16
    debug1: sending SSH2_MSG_KEX_ECDH_INIT
    debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
    debug1: Server host key: ECDSA 7b:70:a2:01:de:01:13:68:9f:38:2a:32:11:a0:60:7e
    debug1: Host ‘我的 IP' is known and matches the ECDSA host key.
    debug1: Found key in /root/.ssh/known_hosts:1
    debug1: ssh_ecdsa_verify: signature correct
    debug1: SSH2_MSG_NEWKEYS sent
    debug1: expecting SSH2_MSG_NEWKEYS
    debug1: SSH2_MSG_NEWKEYS received
    debug1: SSH2_MSG_SERVICE_REQUEST sent
    debug1: SSH2_MSG_SERVICE_ACCEPT received
    debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
    debug1: Next authentication method: gssapi-keyex
    debug1: No valid Key exchange context
    debug1: Next authentication method: gssapi-with-mic
    debug1: Unspecified GSS failure. Minor code may provide more information
    No Kerberos credentials available

    debug1: Unspecified GSS failure. Minor code may provide more information
    No Kerberos credentials available

    debug1: Unspecified GSS failure. Minor code may provide more information


    我改了默认的 22 端口,改成其他的了
    zzandlove
        14
    zzandlove  
    OP
       2016-12-06 17:49:22 +08:00
    @noobsheldon CentOS 7 64
    aaronzjw
        15
    aaronzjw  
       2016-12-06 17:51:04 +08:00
    chmod 600 '密钥'
    zzandlove
        16
    zzandlove  
    OP
       2016-12-06 17:52:14 +08:00
    @sunnyyj 谢谢
    zzandlove
        17
    zzandlove  
    OP
       2016-12-06 17:52:53 +08:00
    @aaronzjw 是 600 哦
    hilenlai
        18
    hilenlai  
       2016-12-06 17:56:27 +08:00
    我有个问题是在 .ssh 里面做了 config 分配,但是每次重启都要执行:`ssh-add -K ~/.ssh/id_rsa` 才可以。谁知道怎么破?
    vultr
        19
    vultr  
       2016-12-06 17:59:50 +08:00
    @zzandlove 自己搜吧,关键词: No Kerberos credentials available
    zzandlove
        20
    zzandlove  
    OP
       2016-12-06 18:02:20 +08:00
    @vultr 好咧,十分感谢大神,我研究研究去
    hellojammy
        21
    hellojammy  
       2016-12-06 18:17:45 +08:00
    我得做法是,使用 ssh-keygen -t rsa 命令 把机器的公钥 id_rsa.pub 直接拷贝到服务器的 authorized_keys 文件中,然后就可以实现 ssh 免密码登录了。详细的步骤可以参见: http://www.hello1010.com/linux_scp
    falcon05
        22
    falcon05  
       2016-12-06 20:19:39 +08:00 via iPhone
    你知道 ssh-copy-id 吗?
    julyclyde
        23
    julyclyde  
       2016-12-06 20:51:29 +08:00
    @vultr 你都没搞明白就瞎指导。本案问的不是 kerberos 认证,是 public key 认证
    julyclyde
        24
    julyclyde  
       2016-12-06 20:53:45 +08:00
    上面-v 的结果不全
    gssapi 之后应该还有好多内容

    另外需要搭配服务器上的日志来看 secure 或者 auth.log
    julyclyde
        25
    julyclyde  
       2016-12-06 20:55:22 +08:00
    从 debug1: permanently_set_uid: 0/0 来看,客户端是 root
    (如果没有指定用其它用户名登录服务器,则也是 root )
    我怀疑是 PermitRoot no 导致的问题
    adrianzhang
        26
    adrianzhang  
       2016-12-06 20:58:43 +08:00 via Android
    居然这么多回复都没解决?用户名用错了没?
    cxbig
        27
    cxbig  
       2016-12-06 20:58:49 +08:00   ❤️ 1
    @zzandlove 你说改了端口,不用 22 。那么上面的详细信息为啥还是链接到 22 ?
    Bardon
        28
    Bardon  
       2016-12-06 21:08:35 +08:00
    问问题前,请放出你的配置
    ls -laF ~/.ssh
    cat /etc/sshd/sshd_config

    不要让大家猜谜语
    Bardon
        29
    Bardon  
       2016-12-06 21:10:54 +08:00
    另外, cat ~/.ssh/config 也放出来,可以修改掉 ip 与端口
    bombless
        30
    bombless  
       2016-12-06 21:15:43 +08:00 via Android
    我之前试过这种报错是网络问题, 233
    vultr
        31
    vultr  
       2016-12-06 21:40:27 +08:00
    @julyclyde 我知道,但是通过这个关键词能搜到对应的答案。我猜的话应该是 authorized_keys 不对。
    vultr
        32
    vultr  
       2016-12-06 21:42:27 +08:00
    @julyclyde 认同你的这个观点:我怀疑是 PermitRoot no 导致的问题
    Showfom
        33
    Showfom  
       2016-12-06 21:48:21 +08:00
    @BOYPT 收下脚本 省得每次都手工 curl 了
    julyclyde
        34
    julyclyde  
       2016-12-06 22:04:15 +08:00
    @vultr 奇怪,为什么这个关键词能搜到……
    billlee
        35
    billlee  
       2016-12-06 22:21:20 +08:00
    看起来客户端都没尝试用密钥认证,你在客户端把私钥和公钥分别放到 ~/.ssh/id_${type} 和 ~/.ssh/id_${type}.pub 了吗?
    kuretru
        36
    kuretru  
       2016-12-06 22:25:54 +08:00 via iPhone
    有可能是 OpenSSL 版本太低了,是不是刚装好系统没更新过软件包
    BOYPT
        37
    BOYPT  
       2016-12-07 00:28:48 +08:00
    @Showfom 嗯~ o(* ̄▽ ̄*)o 我一般这样用

    ssh root@xxxx sh- < ~/addkey.sh
    或者在目标机里面 wget [一个容易记的缩短网址] -O - | sh
    Showfom
        38
    Showfom  
       2016-12-07 01:10:54 +08:00
    @BOYPT 嗯~ o(* ̄▽ ̄*)o 哥哥我收下再说 乃平身~话说我想个短网址来托管 bash 程序- -
    msg7086
        39
    msg7086  
       2016-12-07 05:50:57 +08:00
    airqj
        40
    airqj  
       2016-12-07 07:49:30 +08:00 via Android
    ssh-agent
    运行这个试试
    finian
        41
    finian  
       2016-12-07 08:52:22 +08:00
    cat 一下本地 ~/.ssh/config 配置,还有你连接时用的命令(用户名、端口等)
    zzandlove
        42
    zzandlove  
    OP
       2016-12-07 09:16:35 +08:00
    @billlee 有的
    zzandlove
        43
    zzandlove  
    OP
       2016-12-07 09:17:11 +08:00
    @julyclyde 极有可能是这个
    zzandlove
        44
    zzandlove  
    OP
       2016-12-07 09:17:57 +08:00
    @julyclyde 真没有,我刚试了下,还是这些内容
    zzandlove
        45
    zzandlove  
    OP
       2016-12-07 09:18:14 +08:00
    @adrianzhang 木有的
    zzandlove
        46
    zzandlove  
    OP
       2016-12-07 09:20:05 +08:00
    @finian 用户名就是 root ,我暂时还没有加其他的,端口不是默认的 22 ,我改了一个其他的。默认配置也就改了#PasswordAuthentication yes" 改成"PasswordAuthentication no"
    zzandlove
        47
    zzandlove  
    OP
       2016-12-07 09:20:49 +08:00
    @kuretru 刚买的 VPS ,没有更新,原则上应该不至于还需要去更新把
    AstroProfundis
        48
    AstroProfundis  
       2016-12-07 09:22:45 +08:00
    难道楼主是在 vps 上生成了密钥然后就禁用密码登录出来了.......
    楼主你再重新说一遍上面的每个命令你都在什么地方执行的...

    另外 ls -l ~/.ssh/

    以及我也怀疑是 SSH 客户端版本问题,服务端的太新了所以协商不出来双方都接受的加密算法之类的
    kuretru
        49
    kuretru  
       2016-12-07 09:24:57 +08:00 via iPhone
    @zzandlove 我之前在 nya 开的 CentOS 就是这样,莫名错误公钥连接不上,后来更新软件包就解决了
    zzandlove
        50
    zzandlove  
    OP
       2016-12-07 09:28:32 +08:00
    @Bardon

    ls -laF ~/.ssh

    总用量 20
    drwx------ 2 root root 4096 12 月 6 18:21 ./
    dr-xr-x--- 6 root root 4096 12 月 6 16:33 ../
    -rw-r--r-- 1 root root 395 12 月 6 17:31 authorized_keys
    -rw-r--r-- 1 root root 139 12 月 6 17:40 config
    -rw-r--r-- 1 root root 175 12 月 6 16:09 known_hosts

    -------------------------------------------------------------

    cat /etc/sshd/sshd_config 显示 cat: /etc/sshd/sshd_config: 没有那个文件或目录
    zzandlove
        51
    zzandlove  
    OP
       2016-12-07 09:32:40 +08:00
    @AstroProfundis 这倒没有,是另外开了一个 SSH 链接,我用的是 MAC 自带的终端工具

    ls -l ~/.ssh/
    显示
    -rw-r--r-- 1 root root 395 12 月 6 17:31 authorized_keys
    -rw-r--r-- 1 root root 139 12 月 6 17:40 config
    -rw-r--r-- 1 root root 175 12 月 6 16:09 known_hosts
    zzandlove
        52
    zzandlove  
    OP
       2016-12-07 09:33:21 +08:00
    @kuretru 咋更新,我是在 vultr 买的 vps
    kuretru
        53
    kuretru  
       2016-12-07 09:34:47 +08:00
    @zzandlove RHEL 系的话 yum update , deb 系的 apt-get update aptget upgrade
    baizhebz
        54
    baizhebz  
       2016-12-07 10:06:29 +08:00
    这个设置了吗 AllowUsers
    zzandlove
        55
    zzandlove  
    OP
       2016-12-07 10:08:16 +08:00
    @baizhebz 没有也,有关系吗
    huson
        56
    huson  
       2016-12-07 10:10:18 +08:00
    你是不是在创建机器时候 指定的 key ? 不要这样,先设置密码 然后再用 ssh-copy-id 去拷贝证书,或者拷贝公钥
    finian
        57
    finian  
       2016-12-07 10:46:27 +08:00
    @zzandlove 感觉是没找到本地的 key ,可以在本地 .ssh/config 配置

    ```
    Host test
    HostName x.x.x.x
    Port 22
    User root
    IdentitiesOnly yes
    IdentityFile ~/.ssh/id_rsa # 指定 key
    ```

    然后试试

    ```
    ssh test
    ```
    ppwangs
        58
    ppwangs  
       2016-12-07 10:50:13 +08:00
    把你 ssh 登陆命令打出来
    zzandlove
        59
    zzandlove  
    OP
       2016-12-07 11:39:23 +08:00
    @finian 试过,无效,哈哈
    vultr
        60
    vultr  
       2016-12-07 12:02:06 +08:00
    还没搞定吗? 你还是别找了,按这个说明重新配置一下吧, https://wiki.centos.org/HowTos/Network/SecuringSSH
    263
        61
    263  
       2016-12-07 12:11:27 +08:00
    @zzandlove 看不清楚楼主两边的环境,根本没法判断啊。 能不能 ls -al 列出 vps 和本地 Mac 的 .ssh 文件夹及里面的内容呢?
    murusu
        62
    murusu  
       2016-12-07 12:13:15 +08:00
    客户端的 ssh_config 看看是不是 GSSAPIAuthentication 设置成 yes ?是的话注释掉看看
    263
        63
    263  
       2016-12-07 12:15:54 +08:00
    @263 内容是指文件夹里面的文件,不是文件里面的内容,忘记补充了。
    heyli
        64
    heyli  
       2016-12-07 12:26:40 +08:00
    有可能权限问题
    chmod 700 /home/user
    chmod 600 /home/user/.ssh/authorized_keys
    试试
    finian
        65
    finian  
       2016-12-07 12:49:21 +08:00
    @zzandlove 远程的 /etc/ssh/sshd_config 配置没有把 `PubkeyAuthentication` 设置为 `no` 吧
    zzandlove
        66
    zzandlove  
    OP
       2016-12-07 13:40:57 +08:00
    @finian 哈哈,都试过咯
    zzandlove
        67
    zzandlove  
    OP
       2016-12-07 13:43:32 +08:00
    @murusu 是 RSAAuthentication ,目前是 yes ,也注释了的
    yizhilee
        68
    yizhilee  
       2016-12-07 13:48:09 +08:00
    附言写上你的具体操作步骤和两边环境配置吧。
    AstroProfundis
        69
    AstroProfundis  
       2016-12-07 14:11:12 +08:00
    呃,话说楼主你还上得去服务器的话先把密码认证打开再调试吧,反正默认也会优先尝试密钥登录,不行再 fallback 到密码上...

    然后服务器上 .ssh/ 中文件的权限,和 authorized_keys 里面的密钥是否正确?(除了权限,有没有奇怪的空字符之类的也可以检查下)
    AstroProfundis
        70
    AstroProfundis  
       2016-12-07 14:13:26 +08:00
    以及认真的,服务端 yum update 更新一把试试...
    ayiis
        71
    ayiis  
       2016-12-07 14:28:48 +08:00
    1. 移动.ssh 这个文件夹到 bak

    2. ssh x.x.x.x #随便连一个服务器

    3. 询问是否继续时输入 yes #此时 sshd 就会自动创建带有 sshd 上下文的.ssh 文件夹

    4. 把 bak 里的 authorized_keys 移动到.ssh

    跟 700 , 600 没有关系
    douyang
        72
    douyang  
       2016-12-07 14:29:14 +08:00
    @zzandlove
    [root@niaoyun-118-192-147-6 .ssh]#cd /root/.ssh/
    [root@niaoyun-118-192-147-6 .ssh]#ssh-keygen
    [root@niaoyun-118-192-147-6 .ssh]#ssh-agent
    [root@niaoyun-118-192-147-6 .ssh]#ssh-copy-id -i id_rsa.pub [email protected]

    zzandlove
        73
    zzandlove  
    OP
       2016-12-07 14:30:41 +08:00
    @vultr 哈哈,用这个里面的方法搞定了
    zzandlove
        74
    zzandlove  
    OP
       2016-12-07 14:31:32 +08:00
    问题解决了,我也不知道咋回事,按照 vultr 大神给的链接, https://wiki.centos.org/HowTos/Network/SecuringSSH ,重新配置了下,就好了。。。有需要的收藏这个 url
    xuhaoyangx
        75
    xuhaoyangx  
       2016-12-07 14:58:39 +08:00
    @zzandlove 其实这个问题还有一种可能是 ip 子网设错导致的,很少见。还是给人留个思路,后辈装的系统,不会手动配固定 ip ,就用系统带的工具配,子网不能填写 255.255.255.0 这类格式,就没填,导致子网默认变成 32 ,虽然系统其他功能都能正常使用上网,但是就是 ssh 用证书无法正常登录,改成正常的子网即可
    julyclyde
        76
    julyclyde  
       2016-12-09 18:26:16 +08:00
    @xuhaoyangx 掩码产生的不止影响 ssh ,凡是需要判断远近的都会影响
    merlinfeng
        77
    merlinfeng  
       2017-11-15 16:51:12 +08:00
    碰到了相同的问题 @zzandlove 你是删除从新配置的吗
    merlinfeng
        78
    merlinfeng  
       2017-11-16 15:50:23 +08:00
    RSAAuthentication yes
    PubkeyAuthentication yes
    #AuthorizedKeysFile .ssh/authorized_keys

    艹 手残 把第三行的注释打开了 再注释 重启 sshd 就好了
    lagel
        79
    lagel  
       2018-03-29 17:39:03 +08:00
    我也遇到过:和楼主配置都差不多。
    结果最后发现,我是没有指定:user
    ssh 连接的时候,默认使用了本机的 user。
    zantop
        80
    zantop  
       2019-09-27 17:44:22 +08:00
    我是忘了指定 IdentityFile
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5521 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 08:59 · PVG 16:59 · LAX 00:59 · JFK 03:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.