我想从远程 Unix 服务器执行保存在本地系统上的脚本,以帮助我自动化部署过程。该脚本包含一些命令,用于重命名远程 Unix 服务器上的现有文件,然后将新文件从本地系统传输到 Unix 服务器。
有没有办法做到这一点?
答案1
您选择的工具是ssh
。
只需调用ssh user@remoteHost remoteScript
即可从远程 unix 服务器触发本地系统上的调用。man ssh
有关更多详细信息,请参阅。
如果该脚本尚未在目标计算机上,则有两种方法可以实现它。
通过 scp
function remoteCallSCP() { # <remoteAccount> <script> <interpreter> [arguments}
local remoteAccount=${1}
local script=${2}
shift scriptRunner=${3}
shift 3 # script arguments are following
local tmpFile=$(mktemp) # not perfect, but 99% good
scp ${script} ${remoteAccount}:${tmpFile} # executable bit is lost
ssh ${remoteAccount} ${scriptRunner} ${tmpFile}
}
通过 ssh 和标准输入
function remoteCallStdIn() { # <remoteAccount> <script>
local remoteAccount=${1}
local script=${2}
ssh -T ${remoteAccount} <${script}
}
该-T
选项禁用伪终端分配。这可能有助于修复一些奇怪的问题。
这里缺少以下功能:
- 该脚本必须是与远程帐户的默认 shell 兼容的 shell 脚本。
- 命令行参数不起作用。
作为一种可维护的解决方法,您可以将包含解释器和参数的自定义生成的脚本视为输入。