我想编写一系列涉及多个 ssh 和 scp 调用的命令。每天,我发现自己手动执行此任务:
从 LOCAL 系统,ssh 到 SYSTEM1
mkdir /tmp/data on SYSTEM1
从 SYSTEM1,ssh 到 SYSTEM2
mkdir /tmp/data on SYSTEM2
从 SYSTEM2,SSH 到 SYSTEM3
scp 文件从 SYSTEM3:/data 到 SYSTEM2:/tmp/data
退出到 SYSTEM2
scp 文件从 SYSTEM2:/data 和 SYSTEM2:/tmp/data 到 SYSTEM1:/tmp/data
rm -fr SYSTEM2:/tmp/data
退出到 SYSTEM1
scp 文件从 SYSTEM1:/data 和 SYSTEM1:/tmp/data 到 LOCAL:/data
rm -fr SYSTEM1:/tmp/data
我每天至少执行一次此过程,在不同系统之间切换大约需要 5-10 分钟,然后进行清理。我真的很想在 bash 脚本中自动执行此操作,但到目前为止我的业余尝试都没有成功。您可能会怀疑,系统通信受到限制,这意味着 LOCAL 只能看到 System1,System2 只能看到 System1 和 System3,system3 只能看到 system2,等等。你明白了。做这个的最好方式是什么?此外,System1 是许多其他系统的集线器,因此 SYSTEM2 必须由用户指定(与任何 SYSTEM2 相比,System3 将始终具有相同的相对 IP/主机名)。
我尝试将命令以正确的顺序放入 shell 脚本中,然后在出现提示时手动输入密码(这已经大大提高了效率),但要么该方法不起作用,要么我的脚本执行错误. 此外,我希望脚本有一个命令行参数,该参数将采用“system2”连接到的模式、要复制的数据模式以及本地系统上数据的目标位置。
如
./grab_data system2 *05-14* ~/grabbed-data
我进行了一些搜索,我认为下一步是在每个系统上安装脚本来执行本地任务,然后通过来自相应远程系统的 ssh 命令执行脚本。有没有更好的办法?我应该使用哪些命令?自动化这种嵌套的 ssh 和 scp 问题的一般方法是什么?
我意识到我的描述可能有点令人费解,所以请要求澄清我没有正确描述的任何领域。
谢谢。