使用Shell脚本在远程服务器上执行命令

4

我在构建服务器上有一个部署脚本。每次需要生成构建时,我需要使用ssh登录到服务器,然后触发部署脚本。 我已经生成了公钥/私钥,以便无需输入密码即可登录到构建服务器。但是,仍然需要登录并运行部署脚本。 是否有一种方法可以在本地脚本中自动化登录、执行构建服务器上的部署脚本,然后退出?如何实现这一点?


当然,你可以在本地脚本中执行ssh调用,并交付代码或远程文件以在远程计算机上执行。这是有充分的文档支持的,你可以在互联网上找到大量的例子。 - arkascha
有人回答了你的问题吗?还是你想自动化登录?如果是这样,那么这些标准是什么(比如时间或事件)? - Mario
3个回答

2
您可以使用管道(假设您正在使用*nix操作系统):
echo "your --command --here" | ssh user@host

0
通常只是这样的:

ssh buildserver /path/to/build.sh

你可能需要微调选项。


0

只需在一行中执行ssh <HOST> <COMMAND>。如果您已经可以使用密钥登录,则无需输入密码。例如:

$ ssh localhost 'echo hi'
hi

这个<COMMAND>是以同步方式运行的。这意味着ssh在远程服务器上运行<COMMAND>之前不会完成。看看自己:

$ ssh localhost 'sleep 10'

这个命令会等待10秒钟,直到它完成之前,您将无法输入新的命令。


那么它就是同步的,对吧。 - zilcuanu
@Pradeep 如果末尾没有&,那么所有操作都是同步的。 - ceving
您在回答中提到它是异步的,我认为它是同步的,因为在远程服务器上的命令完成之前,您将无法运行任何命令。 - zilcuanu
正确的。只需在“COMMAND”之后添加&即可使其成为异步 - Arkadiusz Drabczyk
这可以通过两种方式实现异步。远程命令可以在后台启动,一旦启动就允许 ssh 退出,或者 ssh 本身可以在本地机器上后台运行。 - chepner
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接