通过安全shell执行shell操作

通过安全shell执行shell操作

是否可以通过安全 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 并退出即可

相关内容