[student@master ~]$ ssh-copy-id user1@node1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/student/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user1@node1's password:
Permission denied, please try again.
user1@node1's password:
Permission denied, please try again.
user1@node1's password:
sh: line 1: .ssh/authorized_keys: Permission denied
从提供的信息来看,问题出在 .ssh
目录的所有权和权限 上:
问题分析
-
.ssh
目录的所有者是root
,而不是student
:drwx------ 2 root student 6 Sep 23 18:27 .ssh
- 虽然权限是
700
(正确),但 所有者是root
,导致student
用户无法写入.ssh/authorized_keys
。
- 虽然权限是
-
/etc/sudoers.d/student
配置:student ALL=(ALL) NOPASSWD:ALL
- 这表示
student
用户可以无密码执行sudo
,但 不影响.ssh
目录的所有权问题。
- 这表示
解决方法
方法 1:修改 .ssh
目录的所有者
-
登录
node1
并修复所有权:ssh root@node1 # 或者直接在 node1 上操作 chown -R student:student /home/student/.ssh
-R
确保递归修改.ssh
及其内容的所有者。
-
验证权限:
ls -ld /home/student/.ssh
正确输出:
drwx------ 2 student student 6 Sep 23 18:27 /home/student/.ssh
-
重新尝试
ssh-copy-id
:ssh-copy-id student@node1
方法 2:手动创建 .ssh
目录(如果 chown
不可行)
如果 chown
失败(例如 /home/student
本身属于 root
),可以:
- 以
student
用户登录并重建.ssh
:ssh student@node1 rm -rf ~/.ssh # 删除错误的目录(确保备份原有数据) mkdir ~/.ssh chmod 700 ~/.ssh touch ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys exit
- 重新复制公钥:
ssh-copy-id student@node1
根本原因
- 用户家目录或
.ssh
目录被错误地创建为root
所有,可能是由于:- 使用
root
手动创建了/home/student/.ssh
。 - 通过
sudo
执行了某些操作,导致文件归属错误。
- 使用
预防措施
- 避免直接使用
root
修改用户文件,优先使用sudo -u student
:sudo -u student mkdir -p /home/student/.ssh sudo -u student chmod 700 /home/student/.ssh
- 检查用户家目录的默认权限,确保
useradd
或adduser
正确配置。
验证修复
- 检查
.ssh
所有权:
应显示:ssh root@node1 "ls -ld /home/student/.ssh"
drwx------ 2 student student 4096 Sep 23 18:27 /home/student/.ssh
- 测试免密登录:
如果无需密码即可登录,说明问题已解决。ssh student@node1
总结
- 关键问题:
.ssh
目录属于root
,导致student
无法写入。 - 解决方案:使用
chown
修正所有权,或让student
用户重建.ssh
目录。 - 后续建议:避免直接以
root
操作用户文件,使用sudo -u
指定用户。