Bash 通过Plink在Windows命令行上运行shell脚本(带参数)

Bash 通过Plink在Windows命令行上运行shell脚本(带参数),bash,shell,ssh,putty,plink,Bash,Shell,Ssh,Putty,Plink,我需要从Windows在Linux框中远程执行shell脚本 #!/bin/bash if [ "$#" -ne 1 ]; then echo "Illegal number of parameters" exit fi echo "$1" 这是我在Windows命令提示符下运行的命令 cmd> plink.exe -ssh username@host -pw gbG32s4D/ -m C:\myscript.sh 5 我得到的输出是 “参数数非法” 是

我需要从Windows在Linux框中远程执行shell脚本

#!/bin/bash
if [ "$#" -ne 1 ]; then

    echo "Illegal number of parameters"
    exit
fi
    echo "$1"
这是我在Windows命令提示符下运行的命令

 cmd>   plink.exe -ssh username@host -pw gbG32s4D/ -m C:\myscript.sh 5
我得到的输出是

“参数数非法”


是否有任何方法可以将命令行参数传递给将在远程服务器上执行的shell脚本?

是否尝试将命令和参数置于引号中:


i、 e.-m“C:\myscript.sh 5”

您是否尝试将命令和参数放在引号中:


i、 e.-m“C:\myscript.sh5”

您误解了
-m
开关的工作原理

这只是让
plink
加载从本地文件发送到服务器的命令的一种方法

文件未上载并在远程服务器上执行(带参数)

它的内容在本地读取并发送到服务器并在那里执行,就像您在(远程)命令行上键入它一样。你不能给它争论


一种解决方法是,在从批处理文件(例如
run.bat
)运行
plink
)之前,在本地动态生成文件:

然后使用以下参数运行批处理文件:

run.bat 5
上述操作将使脚本在服务器上执行
echo 5


如果脚本很复杂,不要在本地组装,而是在服务器上准备好(正如@MarcelKuiper所建议的),然后通过Plink执行脚本

plink.exe -ssh username@host -pw gbG32s4D/ "./myscript.sh %1"

在本例中,由于我们只执行一个命令,您可以在Plink命令行上传递它,包括参数。您不必将
-m
开关与(临时)文件一起使用。

您误解了
-m
开关的工作原理

这只是让
plink
加载从本地文件发送到服务器的命令的一种方法

文件未上载并在远程服务器上执行(带参数)

它的内容在本地读取并发送到服务器并在那里执行,就像您在(远程)命令行上键入它一样。你不能给它争论


一种解决方法是,在从批处理文件(例如
run.bat
)运行
plink
)之前,在本地动态生成文件:

然后使用以下参数运行批处理文件:

run.bat 5
上述操作将使脚本在服务器上执行
echo 5


如果脚本很复杂,不要在本地组装,而是在服务器上准备好(正如@MarcelKuiper所建议的),然后通过Plink执行脚本

plink.exe -ssh username@host -pw gbG32s4D/ "./myscript.sh %1"

在本例中,由于我们只执行一个命令,您可以在Plink命令行上传递它,包括参数。您不必将
-m
开关与(临时)文件一起使用。

我从Plink中触发了“commands.txt”中的Shell脚本,该脚本对我非常有用,我尝试了以下方法:

  • 您可以在文件中使用&&将脚本定义为一行程序(我在一行程序中定义)
  • 您需要在中运行命令<

注意:使用引号中的第一个EOF,如我从Plink中触发了“commands.txt”中的Shell脚本,该脚本对我非常有用,我尝试了以下方法:

  • 您可以在文件中使用&&将脚本定义为一行程序(我在一行程序中定义)
  • 您需要在中运行命令<

注意:使用引号中的第一个EOF,如我所说的“我遇到错误”无法打开命令文件“C:\myscript.sh 5”嗯,我下载了它并进行了播放。它看起来像是按原样播放批处理文件。如果你想使用参数,你应该在另一端已经有了shell脚本,然后在没有-m选项的情况下调用。我放了一个错误,无法打开命令文件“C:\myscript.sh 5”。嗯,我下载了它,然后到处玩。它看起来像是按原样播放批处理文件。如果你想使用参数,你应该在另一端已经有shell脚本,然后不使用-m选项调用,不要使用
echo y
盲目接受主机密钥。您正在失去安全性。正确,我必须这样做,这帮助我禁用所有交互式提示+接受ssh主机密钥。如果只是禁用所有交互式提示,我建议使用-batch。plink-批处理username@server-IP-pw password-m comments.txt
echo y
并没有“禁用所有交互提示”,这是
-batch所做的
。我也有同样的理解。但是自从我开始使用echo y以来,它在没有批处理的情况下不知怎么工作了。@MartinPrikryl我已经将它编辑成plink-sshusername@hostname-pw password-m commands.txt,现在应该可以了。不要使用
echo y
盲目接受主机密钥。您正在失去安全性。正确,我必须这样做,这帮助我禁用所有交互式提示+接受ssh主机密钥。如果只是禁用所有交互式提示,我建议使用-batch。plink-批处理username@server-IP-pw password-m comments.txt
echo y
并没有“禁用所有交互提示”,这是
-batch所做的
。我也有同样的理解。但是自从我开始使用echo y以来,它在没有批处理的情况下不知怎么工作了。@MartinPrikryl我已经将它编辑成plink-sshusername@hostname-pw password-m commands.txt,现在应该可以了。
plink -ssh username@hostname -pw password -m commands.txt