You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Digital Ocean Droplet非root用户SSH登录失败及切换用户后执行code命令报错求助

Digital Ocean Droplet非root用户SSH登录失败及切换用户后执行code命令报错求助

一、SSH登录my_user提示Permission denied (publickey)的原因及解决办法

这种情况大概率是新用户的SSH密钥配置出了问题,毕竟SSH对文件权限和密钥归属要求特别严格,我帮你梳理几个常见原因和解决步骤:

  1. 新用户的.ssh目录或authorized_keys文件权限不对
    SSH要求用户家目录下的.ssh目录权限必须是700(只有所有者能读写执行),authorized_keys文件必须是600(只有所有者能读写),而且这两个的所有者必须是my_user,否则SSH会直接拒绝登录。

解决步骤:

  • 先通过root登录到Droplet:ssh -i ~/.ssh/id_rsa root@droplet_ip
  • 切换到my_user的家目录,检查.ssh目录是否存在,如果没有就创建:
    mkdir -p /home/my_user/.ssh
    
  • 把root用户的公钥复制到my_user的authorized_keys里(如果你之前是用root的密钥登录的):
    cp /root/.ssh/authorized_keys /home/my_user/.ssh/
    
  • 修正权限和归属:
    chown -R my_user:my_user /home/my_user/.ssh
    chmod 700 /home/my_user/.ssh
    chmod 600 /home/my_user/.ssh/authorized_keys
    

做完这些再试试用ssh -i ~/.ssh/id_rsa my_user@droplet_ip登录,应该就能成功了。

  1. 忘记给新用户配置SSH公钥
    如果上面的操作没用,可能是你根本没把本地的公钥添加到my_user的authorized_keys里。可以直接在本地执行:
ssh-copy-id -i ~/.ssh/id_rsa.pub my_user@droplet_ip

不过前提是你已经给my_user设置了密码,或者root已经配置好密钥能登录,不然这个命令可能执行不了。


二、切换用户后执行code命令报错的解决办法

你用sudo su my_user切换用户后出现mkdir: cannot create directory ‘’: No such file or directory,这个问题很典型——sudo su只是切换了用户身份,但没有加载目标用户的完整环境变量,比如HOME变量还是root的/root,而code命令需要在当前用户的家目录下创建配置文件夹,结果找不到正确的路径,就报了空目录的错。

解决办法很简单:

  • 不要用sudo su my_user,改用su - my_user(注意中间的横杠),这个命令会完全切换到my_user的环境,加载他的所有环境变量,包括正确的HOME路径。
  • 如果还是不行,检查my_user的家目录是否存在,权限是否正常:
    ls -ld /home/my_user
    

确保所有者是my_user,权限至少是700,不然用户自己都没法在家目录里创建文件。

如果是第一次用code命令,切换到my_user后直接执行code,应该就能自动创建所需的配置目录了。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.22 15:47:58