Rsync 后无法通过 SSH 连接到远程主机

use*_*726 4 rsync ssh-keys

我刚刚尝试使用 rsync 将一些文件复制到远程主机,之后我无法再通过 SSH 连接到远程主机。

我使用的命令是:

rsync -av /foo/bar/ user@remotehost:.
Run Code Online (Sandbox Code Playgroud)

一切似乎都正常,但现在我的远程主机不接受我的私钥文件。我怀疑主文件夹,或者至少 .ssh 文件夹已被擦除,但我不知道为什么。

我在 2015 年发现了一个类似的帖子。有没有其他人经历过这个?本地主机是安装在 ProxMox 中的 Linux Mint 18.3 VM,远程机器是物理 Linux Mint 18.3 机器。

类似的问题在这里

use*_*726 5

好的,我知道发生了什么。主驱动器和.ssh文件夹都很好,没有像我原先想象的那样被擦除。所以我使用以下命令在调试模式下运行 sshd:

# /usr/sbin/sshd -d -p 2222
Run Code Online (Sandbox Code Playgroud)

尝试通过调试端口登录后,我得到了以下输出:

***
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]
***
Run Code Online (Sandbox Code Playgroud)

身份验证被拒绝:错误的所有权或目录 /home/user 模式是问题所在。我查看了/home/user文件夹的权限,果然是从755改成了777,正好和源文件夹(/foo/bar)的权限一样

当您对主目录具有组写访问权限时,SSHD 不喜欢它。通过再次更改权限解决了问题:

# chmod 755 /home/user
Run Code Online (Sandbox Code Playgroud)

查看 rsync 手册页:

源上的尾部斜杠会更改此行为,以避免在目标上创建额外的目录级别。您可以将源上的尾随 / 视为“复制此目录的内容”而不是“按名称复制目录”,但在这两种情况下,包含目录的属性都将传输到目标上的包含目录. 换句话说,以下每个命令都以相同的方式复制文件,包括它们对 /dest/foo 属性的设置

rsync -av /src/foo /dest

rsync -av /src/foo/ /dest/foo

因此,为了避免更改目标目录权限并可能弄乱 SSH 身份验证:

rsync -av /foo/bar/* user@remotehost:.
Run Code Online (Sandbox Code Playgroud)

或者..在我的情况下,实际上最好这样做:

rsync -av /foo/bar user@remotehost:.
Run Code Online (Sandbox Code Playgroud)

希望能帮助别人!