我想将一些文件同步到远程服务器。
我试过
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/