是否可以在一个命令中运行 rsync 干运行、确认、然后实际运行(无需再次提供密码)?

是否可以在一个命令中运行 rsync 干运行、确认、然后实际运行(无需再次提供密码)?

现在,在家工作,我在家用计算机上做一些工作(因为 vnc 连接速度太慢),在工作计算机上做一些工作(因为只有在那里才可能)。

因此,我在两台计算机上都有保存工作的文件夹(及其所有内容)的副本。我使用 rsync 使它们保持最新(尽管通过 ssh 网关服务器的 ssh 隧道)。由于我经常必须在每个方向上进行更新,因此有时会变得混乱。因此,我喜欢进行一次试运行,以确保我不会因为不小心修改了另一台计算机上的文件而覆盖一台计算机上的新工作,或者避免其他可能的冲突。

但是,这意味着我需要运行该命令两次,一次使用该-n选项,一次不使用该选项。我可以通过编写脚本轻松避免,但问题是,这也意味着我必须输入密码才能远程连接两次。

我希望能够只运行一个命令,我只需要输入密码一次,这会进行空运行,并通过按“enter”或“y”或其他东西(或取消)等待我的确认然后进行真正的同步。这可能吗?


编辑额外说明:

我正在尝试做的事情如下:首先,我通过网关服务器建立一个 ssh 隧道:(ssh -N -L 2222:workcomputer:22 me@gatewayserver它要求我提供 的密码me@gatewayserver)。然后我使用rsync -ruve "ssh -p 2222" me@localhost:~/folder ~/folder它询问我的密码me@workcomputer,而我不想多次提供密码。

答案1

您可以通过与最终计算机进行初始 ssh 连接并将网关指定为来设置通过网关的连接跳转主机-J。添加操作-N -M会使此连接保持打开状态,以便将来发送到最终计算机的 ssh 命令可以通过第一个连接进行多路复用。

放在文件的开头~/.ssh/config

ControlPath ~/.ssh/master-%r@%h:%p

然后连接一次:

$ ssh -J me@gatewayserver -N -M me@workcomputer

它应该要求您输入网关的密码,然后输入工作计算机的密码。连接后,您可以运行命令而无需任何密码,例如

$ ssh me@workcomputer hostname
$ rsync -nv myfile me@workcomputer:/tmp

您还可以添加-v到第一个 ssh 以便您可以看到发生了什么。详细输出-v将显示正在创建的套接字~/.ssh

debug1: setting up multiplex master socket
debug1: channel 0: new [/home/me/.ssh/master-me@workcomputer:22]

现在,当您需要另一个 ssh 到同一目的地时,它将使用现有的 ssh:

$ ssh me@workcomputer pwd

给出详细输出:

debug1: multiplexing control connection
debug1: channel 1: new [mux-control]
debug1: channel 2: new [client-session]
debug1: Sending command: pwd
debug1: channel 2: free: client-session, nchannels 3
debug1: channel 1: free: mux-control, nchannels 2

rsync 命令也是如此:

$ rsync -nv myfile me@workcomputer:/tmp
sent 43 bytes  received 19 bytes  124.00 bytes/sec
total size is 173  speedup is 2.79 (DRY RUN)

输出:

debug1: multiplexing control connection
...
debug1: Sending command: rsync --server -vne.LsfxC . /tmp

相关内容