GLa*_*DER 39 linux ssh rsync scp
我目前远离局域网,我需要备份我的笔记本电脑。我的服务器上有一份最近的笔记本电脑副本,我通常使用 rsync 备份笔记本电脑。现在我希望这样做,但在我的 LAN 之外。
简而言之,我想通过 B 将数据从 A 发送到 C,其中 A 是我的笔记本电脑,B 是我的路由器,C 是我的服务器。
我找到了这个命令:A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination,它适用于通过 scp 传输文件 - 但由于我的服务器上已经有了大部分数据,我希望使用 rsync 只同步增量。
我试过:A$ rsync file -e 'ssh B ssh' C,只要我被提示提供用户:C 的密码,它就可以工作。但是,当我输入密码时,没有任何反应。路由器运行的是 Tomato v1.28,我无法将其设置为使用 ssh 配置文件使其能够登录到 C w/oa 密码。
关于如何使这项工作的任何想法?
cri*_*ret 58
这个问题基本上在其他地方得到了回答,包括这里的 scp和这里的 rsync。由于后者包括我的答案,但没有接受任何答案,我将在这里重复。
正如您所指出的,您可以使用rsync's-e | --rsh选项,但它会更复杂一些:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
Run Code Online (Sandbox Code Playgroud)
或者,如果您的版本ssh足够新(OpenSSH >= v7.3),您可以使用-J( ProxyJump) 选项
rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/
Run Code Online (Sandbox Code Playgroud)
请注意,我使用-A(代理转发),但它也应该具有密码验证的工作,如果你不使用钥匙,当然,你可以替换proxy使用B,并dest用C在你的榜样。
如果碰巧您没有足够新的ssh版本(>= 5.3,IIRC),您可以使用netcat代替-W选项ssh:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
Run Code Online (Sandbox Code Playgroud)
最后,如评论中所述,您可以将ProxyCommand放入您的$HOME/.ssh/config文件中,这样您就不必拥有如此复杂的命令行。具体来说,添加如下内容:
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
Run Code Online (Sandbox Code Playgroud)
或者,使用ProxyJumpOpenSSH >= v 7.3:
Host C
ProxyJump PROXYHOST
Run Code Online (Sandbox Code Playgroud)
那么你应该能够做到:
rsync -azv foo/ C:./foo/
Run Code Online (Sandbox Code Playgroud)
小智 7
以下是如何将数据从本地计算机复制到目标计算机,其中堡垒计算机位于两者之间(包括进度条):
rsync -r --info=progress2 -e 'ssh -J bastion-user@bastion-host:22' local-file-path target-machine-user@target-machine-host:target-machine-save-location
Run Code Online (Sandbox Code Playgroud)