好的,我找到了问题所在。主目录和.ssh文件夹都没有问题,一开始我以为已经被清除了。所以我使用以下命令以调试模式运行sshd:
# /usr/sbin/sshd -d -p 2222
尝试通过调试端口登录后,我得到了以下输出:
***
debug1: temporarily_use_uid: 1000/1000 (e=0/0)
debug1: trying public key file /home/user/.ssh/authorized_keys
debug1: fd 4 clearing O_NONBLOCK
Authentication refused: bad ownership or modes for directory /home/user
debug1: restore_uid: 0/0
Failed publickey for user from 127.0.0.1 port 37422 ssh2: RSA
SHA256:xxxx
Connection closed by 127.0.0.1 port 37422 [preauth]
***
"认证被拒绝:/home/user 目录的所有权或模式不正确"是问题所在。我检查了 /home/user 目录的权限,发现它已经从 755 改为了 777,这恰好与源目录 (/foo/bar) 的权限相同。
当您在主目录上具有组写入权限时,SSHD 是不支持的。通过将权限改回来,问题得以解决:
# chmod 755 /home/user
看一下rsync的手册:
源目录路径末尾有一个斜杠,可以改变rsync的行为,避免在目标路径上创建额外的目录层级。你可以理解为源目录路径末尾有一个斜杠意味着“复制这个目录的内容”,而不是“按名称复制目录”。但两种情况都会将包含目录的属性传输到目标路径上的包含目录。换句话说,下面两个命令是以相同的方式复制文件,包括它们对/dest/foo目录属性的设置:
rsync -av /src/foo /dest
rsync -av /src/foo/ /dest/foo
因此,为了避免更改目标目录权限并潜在地干扰SSH身份验证:
rsync -av /foo/bar/* user@remotehost:.
在我的情况下,更好的做法实际上是:
rsync -av /foo/bar user@remotehost:.
希望这能帮助其他人!
rsync -avz“$1”$USER@${HOST[0]}:~
,我将其更改为rsync -avz“$1”"$USER@${HOST[0]}:/home/$USER/$2"
。我认为波浪号“~”是问题所在,但我不确定。如果有人知道真相,我会很感激能够阅读它:-)。 - Digital Impermanence