是否可以通过安全 shell 从 bash 脚本执行 shell 操作。
以下是您可能想要这样做的原因示例。假设您有一个简单的 unix 操作系统,您只需要在其上构建和运行,但您想在另一台机器上进行所有开发。我想编写一个具有以下功能的 bash 脚本:
scp file to location on other machine
ssh to other machine
cd into correct directory
make
run program
scp results to file on original computer
exit ssh
这有可能吗?(请原谅我的双关语:p)
答案1
作为伪代码的直接示例,
scp file remote:/tmp/file
ssh remote 'cd /tmp; cat file >another; rm another'
scp remote:/tmp/another /tmp
也许你想避免使用临时文件;如果你可以使用标准输入和标准输出,那么你可能会遇到类似
ssh remote 'remotescriptname' <input >output
...假设remotescriptname
可以读取标准输入,并最终在标准输出上产生结果。(您将希望防止诸如make
在标准输出上产生任何输出的嘈杂命令;make -s
是您的朋友。)
您会注意到,您可以在单引号之间放置任意复杂的 shell 脚本片段。如果您喜欢将各个命令的整个命令行放在单引号之间(如我的第一个示例所示),则不需要程序remotescriptname
;但您可能还是想这样做,因为自包含的脚本更易于调试和维护。
答案2
是的,这是可能的。例如:
$ echo 'date' | ssh localhost
Pseudo-terminal will not be allocated because stdin is not a terminal.
Password:
Sun Dec 16 22:15:08 CST 2012
我建议您在远程端创建一个脚本,该脚本将执行构建并在成功后将 scp 返回,以最大限度地减少您需要发送的远程命令数量。此外,制作无密码的 RSA 密钥也会让您的生活更轻松。
编辑:
在我们讨论这个话题时,您可能会对其中一些程序感兴趣。
distcc
:在多台机器上分发构建
buildbot
:在任意数量的机器/操作系统上签入代码时自动构建代码并运行单元测试等。
答案3
ssh user1@server1 '/scripts/backup.sh' 将在远程机器上运行脚本。您只需在所需位置 scp“backup.sh”,调用 ssh 并退出即可