execute commands on remote server using shell script
我在生成服务器上有一个部署脚本。每次需要生成构建时,我都需要使用ssh登录到服务器,然后触发部署脚本。我设法生成了公钥/私钥,这样我就不需要输入密码就可以登录到构建服务器。但我仍然需要登录并运行部署脚本。有没有一种方法可以自动登录,在构建服务器上执行部署脚本,然后在一个本地脚本中退出。如何做到这一点
- 当然,您可以在本地脚本中执行对ssh的调用,并移交要远程执行的代码或远程文件。这是很好的记录,你可以在互联网上找到无数的例子。
- 是否有人1回答了您的问题,或者您也希望自动登录?如果是,这些标准是什么(如时间或事件)?
您可以使用管道(假设您使用的是*nix操作系统):
1
| echo"your --command --here" | ssh user@host |
只需在一行中执行ssh 。如果你可以的话使用您不必键入密码的密钥登录。例子:
1 2
| $ ssh localhost 'echo hi'
hi |
此是同步运行的。这意味着ssh不会完成,直到远程服务器上的运行完成。看看你自己:
1
| $ ssh localhost 'sleep 10' |
此命令将等待10秒,直到完成后才能键入新命令。
- 然后它是同步的。
- 对不起,我不明白-这是个问题吗?
- @在结尾没有&的情况下,所有事情都是同步的。
- 您在回答中提到它是异步的。我认为它是同步的,因为在远程服务器上的命令完成之前,您将无法运行任何命令。
- 没错。在COMMAND后加&使其异步
- 有两种方法可以使其成为异步的。远程命令可以在后台启动,启动后可以退出ssh,也可以在本地机器的后台运行ssh。
- 这是正确的。我认为把&放在整个命令之后会使事情稍微快一点,因为调用ssh的包装器可以立即转到下一行w/o,甚至等待建立连接。这取决于OP想要做什么。
通常只是
1
| ssh buildserver /path/to/build.sh |
不过,您可能需要调整选项。