从笔记本电脑启动服务器脚本

从笔记本电脑启动服务器脚本

我有一台可以通过笔记本电脑 ssh 访问的服务器。

我希望能够在我的笔记本电脑上运行一个脚本,该脚本向服务器发送信号,使服务器在那里启动给定的脚本。

我怎么做?

答案1

ssh remotehost 'command1 ; command ; command3'

或者,如果您只想在命令 1 成功时运行命令 2,在命令 2 成功时运行命令 3:

ssh remotehost 'command1 && command && command3'

请注意,您需要特别注意 shell 引用问题,当您在本地 shell 中键入命令以在远程 shell 上执行命令时,它们可能会变得非常复杂(即使只使用本地 shell,它们也会变得非常糟糕)壳)。例如,考虑以下两个命令之间的差异:

ssh remotehost 'ps hu -Csshd | awk "{print \$2}"'
ssh remotehost 'ps hu -Csshd | awk "{print $2}"'

第一个仅打印 sshd 进程的 PID。第二个打印 sshd 进程的完整ps hu列表 - 未转义的 $2 是一个空字符串,因此 awk 命令变成了{print }

第三种选择是在远程主机上运行 ps 并在本地运行 awk:

ssh remotehost ps hu -Csshd | awk '{print $2}'

在上面的两个命令中,整个带引号的字符串在远程主机上执行,因为这是您为 ssh 命令提供的参数。在此示例中,直到|为止的所有内容。远程执行(同样是因为“ps”、“hu”和“-Csshd”是 ssh 命令的参数,并且该行的其余部分在本地执行。

对于比您想要使用单行运行更复杂的任务(或者当 shell 引用变得地狱般时),您可以编写一个 shell 脚本并将其复制到远程主机,然后使用 ssh 执行它:

vi myscript.sh
chmod +x myscript.sh
scp myscript.sh remotehost:/usr/local/bin/
ssh remotehost myscript.sh

您可以将脚本复制到您喜欢的任何地方,但是a)您需要对目录进行写访问,b)它不能位于使用noexec安装的文件系统上(不常见,但有时/tmp安装为noexec),除非您使用以下命令运行它“/path/to/interpreter /path/to/script” - 例如/bin/bash /tmp/myscript.sh

相关内容