新Mac设备SSH连接CentOS服务器报公钥权限拒绝问题排查
SSH公钥认证报Permission denied (publickey)问题排查
问题描述
目前关于SSH公钥认证报错的多数讨论均针对AWS或GitHub相关场景,本次问题不属于上述两类,涉及一台普通的Digital Ocean CentOS 8服务器。
旧款MacBook可正常连接该SSH服务器,使用的连接命令如下:
ssh -2 -p 5555 -i /Users/Me/.ssh/id_rsa me@99.99.99.99
注:出于隐私保护,上述命令中的端口号与IP地址已做替换处理
更换新款MacBook Pro后,已按常规流程完成ssh-keygen相关配置,手动将生成的id_rsa.pub公钥上传至服务器的.ssh/authorized_keys文件。操作时以root用户登录服务器,通过nano编辑器将公钥内容追加写入authorized_keys文件。以root用户身份查看服务器.ssh目录的文件权限信息如下:
990971649 -rw-------. 1 root root 2722 Jul 7 07:52 authorized_keys 990971651 -rw-------. 1 root root 3389 Jan 10 2021 id_rsa 990971652 -rw-------. 1 root root 747 Jan 10 2021 id_rsa.pub
但完成公钥添加操作后,尝试连接时仍返回如下报错:
me@99.99.99.99: Permission denied (publickey)
多数同类问题的解决方案为调整SSH相关配置参数,但经检查当前服务器的SSH配置无异常,且旧款MacBook可正常完成连接。服务器当前SSH配置如下:
Protocol 2 Port 5555 LoginGraceTime 60 ClientAliveInterval 120 ClientAliveCountMax 3 MaxSessions 6 AllowUsers root PermitEmptyPasswords no PasswordAuthentication no PermitRootLogin yes X11Forwarding no MaxAuthTries 6 IgnoreRhosts yes AllowTcpForwarding no AllowAgentForwarding no Compression no TCPKeepAlive no UseDNS no HostbasedAuthentication no PubkeyAuthentication yes AuthenticationMethods publickey
根因排查与解决步骤
配置中存在一处直接导致登录失败的显性问题:AllowUsers root参数代表SSH服务仅允许root用户登录,当前尝试登录的me用户会被直接拦截,优先修正该配置。
其余高频故障点按优先级逐一排查:
- 修正SSH服务白名单配置:将
AllowUsers root修改为AllowUsers root me,保存配置后执行systemctl restart sshd重载服务,注意CentOS 8的SSH服务端进程名为sshd,不要误重载客户端服务。 - 确认公钥写入路径正确:当前操作是用root用户登录,公钥被写入了
/root/.ssh/authorized_keys,该文件仅对root用户生效。me用户的公钥需要写入/home/me/.ssh/authorized_keys路径,不要混淆不同用户的家目录。 - 修正权限与安全上下文:SSH对文件权限校验逻辑非常严格,
me用户的家目录、.ssh目录、authorized_keys文件属主必须为me,权限不能过高,执行以下命令修正:chown -R me:me /home/me/.ssh chmod 755 /home/me chmod 700 /home/me/.ssh chmod 600 /home/me/.ssh/authorized_keys # CentOS默认开启SELinux,需修复目录安全上下文避免拦截 restorecon -Rv /home/me/.ssh - 校验公钥内容完整性:通过nano手动追加公钥时,容易出现公钥被截断、错误插入换行、多余空格的问题。标准的
id_rsa.pub内容为单行,以ssh-rsa开头,末尾为密钥生成时的备注信息,不要手动拆分多行。 - 兼容新旧版本OpenSSH算法:新款MacBook预装的OpenSSH版本更高,默认禁用了sha1哈希的rsa公钥签名算法,连接时追加参数测试:
ssh -o PubkeyAcceptedKeyTypes=+ssh-rsa -p 5555 -i /Users/Me/.ssh/id_rsa me@99.99.99.99,如果能正常连接,在客户端~/.ssh/config中追加以下配置永久生效:Host 99.99.99.99 Port 5555 IdentityFile ~/.ssh/id_rsa PubkeyAcceptedKeyTypes +ssh-rsa - 日志精准定位:以上步骤都无法解决时,在服务器侧执行
tail -f /var/log/secure实时打印SSH日志,同时在客户端用带debug参数的命令发起连接:ssh -vvv -p 5555 -i /Users/Me/.ssh/id_rsa me@99.99.99.99,两端输出的日志会明确标注失败原因,包括密钥不匹配、权限拦截、配置不生效等问题都会直接提示。
内容的提问来源于stack exchange,提问作者Khom Nazid
相关产品推荐
相关产品推荐

