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

5

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

我所使用的命令是:

rsync -av /foo/bar/ user@remotehost:.

一切似乎都正常,但现在我的远程主机不接受我的私钥文件。我怀疑家目录或至少是.ssh目录已经被清除,但我无法弄清原因。
我找到了一个类似于2015年的帖子,还有其他人遇到过这个问题吗?本地主机是在ProxMox安装的Linux Mint 18.3 VM,远程主机是实际的Linux Mint 18.3机器。
类似问题在这里
2个回答

6

好的,我找到了问题所在。主目录和.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:.

希望这能帮助其他人!

我遇到了完全一样的问题。很有趣。用户目录权限被更改为775,而不像你的权限更改为777。无论如何,我使用另一个之前设置的用户通过ssh连接到这个盒子并确认了权限已更改。我正在使用的冒犯性rsync命令是rsync -avz“$1”$USER@${HOST[0]}:~,我将其更改为rsync -avz“$1”"$USER@${HOST[0]}:/home/$USER/$2"。我认为波浪号“~”是问题所在,但我不确定。如果有人知道真相,我会很感激能够阅读它:-)。 - Digital Impermanence
这太疯狂了。良好的故障排除。 - Valerio Bozz
为什么你在用户主目录上设置了组/全局读取权限!!?!那里存储了许多关键的密钥和重要文件。它们应该几乎肯定是"700"。 - Ajax

0

"rsync -e "ssh -i testing.pem" -rlpEAXogDtSzh -P -x --exclude-from="$EXCLUDEFILE" --rsync-path="sudo rsync" --verbose --progress / azureuser@$TARGETVM:/home/azureuser/testing-folder",您需要更改目标路径,这样它就不会更改目录权限。如果您无法使用root或密码登录,请按照此教程使用pem密钥文件进行迁移。 https://learn.microsoft.com/en-gb/archive/blogs/keithmayer/cloud-to-cloud-migrating-ubuntu-linux-virtual-machines-to-microsoft-azure-from-amazon-aws


为了帮助楼主更容易地理解您的回答,您应该使用反引号(`)格式化命令。一行一个反引号,一组代码三个反引号。 - Broski-AC

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接