Digital Ocean Droplet非root用户SSH登录失败及切换用户后执行code命令报错求助
Digital Ocean Droplet非root用户SSH登录失败及切换用户后执行code命令报错求助
一、SSH登录my_user提示Permission denied (publickey)的原因及解决办法
这种情况大概率是新用户的SSH密钥配置出了问题,毕竟SSH对文件权限和密钥归属要求特别严格,我帮你梳理几个常见原因和解决步骤:
- 新用户的
.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登录,应该就能成功了。
- 忘记给新用户配置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
相关产品推荐
相关产品推荐

