Rsync 无法在接收器上找到文件或目录,可能是由于指定 ssh 导致的权限问题(指示端口所需)

Rsync 无法在接收器上找到文件或目录,可能是由于指定 ssh 导致的权限问题(指示端口所需)

我想将一些文件同步到远程服务器。

我试过

rsync -rav --delete -e 'ssh -p "$SSH_PORT" "$SSH_USERNAME"@"$SSH_HOST"' ./ /home/"$SSH_USERNAME"/src/

我收到错误

rsync: [Receiver] mkdir "/home/SSH_USERNAME/src" failed: No such file or directory (2)

我使用这种-e 'ssh -p格式是因为这似乎是指定非标准 ssh 端口的推荐方法对于给定的服务器。

不过,我担心基于其他答案这可能会导致权限奇怪,阻止 rsync 写入。

在远程服务器上,给定的位置确实存在,显然具有适当的权限:

在远程服务器上

SSH_USERNAME@SSH_HOST:~$ pwd
/home/SSH_USERNAME
SSH_USERNAME@SSH_HOST:~$ ls -al
drwxr-xr-x 6 SSH_USERNAME SSH_USERNAME 4096 Jun 14 03:44 .
drwxr-xr-x 4 root       root       4096 Jun 13 23:18 ..
-rw------- 1 SSH_USERNAME SSH_USERNAME  221 Jun 14 03:44 .bash_history
-rw-r--r-- 1 SSH_USERNAME SSH_USERNAME  220 Apr  4  2018 .bash_logout
-rw-r--r-- 1 SSH_USERNAME SSH_USERNAME 3771 Apr  4  2018 .bashrc
drwx------ 2 SSH_USERNAME SSH_USERNAME 4096 Jun 14 00:44 .cache
drwx------ 3 SSH_USERNAME SSH_USERNAME 4096 Jun 14 00:44 .gnupg
-rw-r--r-- 1 SSH_USERNAME SSH_USERNAME  807 Apr  4  2018 .profile
drwxrwxr-x 3 SSH_USERNAME SSH_USERNAME 4096 Jun 14 19:53 src
drwx------ 2 SSH_USERNAME SSH_USERNAME 4096 Jun 14 00:52 .ssh
SSH_USERNAME@SSH_HOST:~$ cd ..
SSH_USERNAME@SSH_HOST:~$ ls -al
drwxr-xr-x  4 root       root       4096 Jun 13 23:18 .
drwxr-xr-x 22 root       root       4096 Jun 13 22:55 ..
drwxr-xr-x  5 caleb      caleb      4096 Jun 14 01:15 caleb
drwxr-xr-x  6 SSH_USERNAME SSH_USERNAME 4096 Jun 14 03:44 SSH_USERNAME

如何将目录同步到具有非标准 SSH 端口的服务器?

万一:

Distributor ID: Ubuntu
Description:    Ubuntu 18.04.6 LTS
Release:    18.04
Codename:   bionic

答案1

即使没有任何其他更改,您的rsync语法也有点不对劲。我建议更改为:

rsync -rav --delete -e 'ssh -p "$SSH_PORT"' ./ "$SSH_USERNAME"@"$SSH_HOST":/home/"$SSH_USERNAME"/src/

另外,请阅读man 5 ssh_config如何构建 SSH“别名”,将特定主机地址、用户名、端口(以及可能的其他参数,如 SSH 身份密钥)与方便的昵称联系起来。然后,每当您通过 SSH 连接到该昵称时,ssh都会使用这些特定参数进行连接。

在您的 中~/.ssh/config,添加:

Host Nickname
  Hostname $SSH_HOST
  Port $SSH_PORT
  User $SSH_USERNAME

在哪里:

Nickname is a convenient name of your choice
$SSH_HOST is the proper name, or perhaps an IP
$SSH_PORT is the port number
$SSH_USERNAME is the desired username

例如:

Host foobar
  Hostname foobar.example.com
  Port 2222
  User myusername

那么你的rsync语法就变成:

rsync -rav --delete ./ foobar:/home/"$SSH_USERNAME"/src/

$SSH_USERNAME如果主机上用户的主目录foobar已经是/home/$SSH_USERNAME,那么您可以缩短rsync命令的远程路径:

rsync -rav --delete ./ foobar:src/

相关内容