在远程系统上运行脚本而不将脚本复制到那里

在远程系统上运行脚本而不将脚本复制到那里

我在 上有一个脚本server A,我需要在 上运行该脚本server B,但我不想将脚本复制到 上server B

我需要将文本文件作为参数传递给脚本

我该怎么做呢?

答案1

您可以简单地cat使用脚本并将其传送到 ssh 会话:

cat /path/to/local/script.sh | ssh user@remote

这应该适用于大多数情况,但请注意,该脚本将由远程上的默认登录 shell 解释。如果脚本是为另一个 shell 编写的,则这将不起作用。

答案2

我个人发现的最好方法是进行 Base64、复制、解码然后运行。这可以确保 1) 您不需要创建文件并使其在远程主机上可执行,2) 您不会遇到编码或有趣字符的问题。您可以相当容易地将其扩展到解释语言(必须是一个独立的程序)。

cat script.sh | base64 | ssh user@host "base64 -d - | bash"

这有点像意大利面条,但概念就在那里。

答案3

而是使用函数!

将脚本转换为函数并使用参数传递它。

这样 :

ssh user@host -tq "function foo(){ echo $*;}; foo hello world"

但每次都编写一个函数作为参数是不切实际的。

为了使事情变得简单,创建一个有助于调用远程计算机上的本地函数的函数。

foo () { 
    echo "${@}" 
}
bar () { 
    echo ${#} 
}

ssh_func() {
    ssh -tq user@host "function $(typeset -f ${1}); "  ${2:+"${@:2}"}; 
    # typeset -t (prints function's body chunk) to be sent with args
}
ssh_func foo hello world # this will call foo on remote machine
ssh_func bar hello world

相关内容