You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Cloud-init部署后SSH公钥认证失败的原因排查

Cloud-init部署后SSH公钥认证失败的原因排查

碰到这种情况确实挺闹心的,明明跟着文档配置了,结果还是连不上,我帮你梳理几个容易被忽略的排查方向:

  • 检查用户家目录及.ssh相关文件权限
    SSH对公钥相关的权限要求很严格,权限太开放会直接拒绝认证。登录实例后(可以用你配置的ubuntu初始密码登录),执行命令ls -ld ~ ~/.ssh ~/.ssh/authorized_keys查看:

    • 家目录权限必须是700
    • .ssh目录权限必须是700
    • authorized_keys文件权限必须是600
      要是权限不对,用chmod命令调整,比如chmod 700 /home/ubuntuchmod 600 /home/ubuntu/.ssh/authorized_keys
  • 确认cloud-init是否正确写入公钥
    直接查看实例上/home/ubuntu/.ssh/authorized_keys的内容,对比你本地的公钥,看看是不是完全一致——有没有多余的换行、字符缺失,或者被错误覆盖的情况。有时候cloud-init执行过程中可能因为配置格式问题,没把公钥正确写进去。

  • 检查SSH服务端配置
    打开/etc/ssh/sshd_config文件,确认几个关键配置:

    • PubkeyAuthentication是否设置为yes,如果是no的话公钥认证直接失效
    • AuthorizedKeysFile路径是否为默认的.ssh/authorized_keys .ssh/authorized_keys2,别被修改成了其他路径
    • 如果你尝试用root用户登录,还要确认PermitRootLogin是否允许(不过更建议用ubuntu用户登录)
      修改完配置后记得重启SSH服务:sudo systemctl restart sshd
  • 查看cloud-init执行日志
    实例上的cloud-init日志在/var/log/cloud-init.log,搜索和用户创建、SSH密钥相关的内容,看看有没有报错信息,比如“Failed to add SSH key”之类的提示,这能帮你定位是不是配置解析或者执行环节出了问题。

  • 排查本地SSH连接命令的问题
    确保你用的连接命令指定了正确的用户,比如ssh ubuntu@<实例IP>,别默认用本地用户名去连接(除非本地用户名和实例上的ubuntu一致)。另外可以添加-v参数查看详细调试日志:ssh -v ubuntu@<实例IP>,从输出里能看到哪一步出了问题——比如是不是没加载你的私钥,或者服务器端拒绝了你的密钥。

  • 检查云平台的密钥管理配置(公有云场景)
    有些公有云会自带SSH密钥注入机制,可能和cloud-init的配置冲突,比如平台自动替换了authorized_keys里的内容,或者禁用了用户自定义的密钥配置。这时候可以去云平台的实例详情页,看看有没有相关的密钥管理设置。

备注:内容来源于stack exchange,提问作者decisive_skeleton

火山引擎 最新活动