问一个似乎可以用 Google 来解决的问题,我觉得有点傻,但我正在尝试编写一个重复性任务:(1)通过 ssh 进入远程服务器(2)在我的主目录中运行 script.sh,(3)复制/粘贴输出。
如果我能编写一个脚本来帮我完成这项工作,那就太好了。我编写了一些scp
从这些机器上归档的 bash 脚本,但从未编写过在这些机器上运行脚本的脚本。
是否可以在机器1上有一个脚本,然后通过机器2登录并执行script.shn,将输出转储到机器 1 上?如果是,怎么做?
答案1
这很简单:
ssh 用户@主机命令
命令= 根据需要用管道等进行详细说明。
答案2
与Jeffrey的答案类似,但有一个单行循环。
for i in "server1 server2 otherserver"; do ( ssh username@$i yourcommand & ); done
这样您就可以在后台生成每个任务,因此整个命令只需花一点时间即可从您的工作站执行。如果您使用基于密码的身份验证,则需要执行以下操作之一:
- 实现无密码登录(首选!)
- 删除“&”符号,每次都输入密码
- 在命令行上指定密码(仅为了完整性 - 请不要!)
答案3
所以我认为这里真正的问题是如何将脚本从机器 1 传输到机器 2 以便执行它,对吗?有很多方法可以做到这一点。您可以在机器 1 上使用脚本,首先使用 scp 将脚本文件传输script
到机器 2,然后运行ssh machine2 script
。
如果您始终设置公钥身份验证,这样就不会提示您输入密码,那么这种方法很有效。如果您每次登录 machine2 时都需要输入密码,那么您需要查看使用 的方法expect
,详情请参阅这个 stackoverflow 帖子. 您应该能够使用 autoexpect 快速编写必要的 expect 脚本。
其他方法包括在所有主机上通过 nfs 安装共享目录。在这种情况下,您将脚本文件复制到 machine1 上的该目录,然后该文件在 machine2 和连接到同一 nfs 安装的所有其他计算机上都可用。
最后,这是配置管理工具所面临的一个问题CF引擎和木偶用某种文件传输机制来解决。在这种设置中,客户端计算机连接到中央服务器并下载脚本文件,然后再执行它。