目前我正在使用SSHPass
脚本连接到远程服务器:
sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no [email protected]
并远程执行任何命令,我使用:
sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no [email protected] "COMMAND"
我打算将一个脚本 ( ) 中的连接步骤和另一个脚本 ( conn.sh
) 中的命令分开cmd.sh
。
我试过这样:
命令.sh:
#!/bin/bash
ls -ltr
conn.sh:
#!/bin/bash
sshpass -p PASSWORD ssh -o StrictHostKeyChecking=no [email protected] "$1"
并在给两个脚本“chmod a+x”后执行:
./conn.sh cmd.sh
但它给了我错误:
cmd.sh: command not found
我什至试图$1
用路径替换cmd.sh
,但它给了我这个错误:
sh: /home/myhome/cmd.sh: No such file or directory
它失败的原因是当你运行类似的东西时
command
不仅在远程机器上运行,还在远程机器上搜索。因此,当您运行时./conn.sh cmd.sh
,您正在连接到远程,然后您尝试运行cmd.sh
在远程上调用的脚本。由于没有这样的脚本(它存储在您的本地计算机上),因此执行失败并且您会看到该错误。您可以通过将您的更改
conn.sh
为:然后运行
这将在远程机器上打开一个 bash shell。
-s
告诉 bash 从标准输入读取命令,并提供< "$1"
第一个参数conn.sh
作为该 bash shell 的输入。你确定你需要这样做吗?您所描述的几乎可以肯定是一个XY 问题。简单的解决方案是
cmd.sh
在远程服务器上创建。然后你可以做