通过批处理文件在 Unix 上执行来自 Windows 的命令

Executing Commands from Windows on Unix via Batchfile

我有一个问题好久找不到解决办法了。 我想在我的 windows 机器上从批处理文件中执行以下行:

ssh %1@%2 "D: && ssh %3@%4 cd /media/usbmsd/ && cp "$(ls -t /media/usbmsd | head -1 )" /buffer"

此批处理文件稍后将使用参数从 cmd 行执行。我正在尝试通过 ssh 访问一个系统 (windows),然后通过 ssh 再次跳转到另一个系统 (unix),我需要在 /media/usbmsd 目录中找到最新的文件并将其复制到文件夹缓冲区。

当我从我的 cmd 行中执行它时,出现以下错误:

'head' 不被识别为内部或外部命令, 可运行的程序或批处理文件。

我不得不说我对这种应用程序不是很有经验,很高兴能得到任何帮助

问候丹尼斯

您可以通过代理跳转连接,然后您不需要第二个 ssh 命令。
然后需要对引号进行一些模糊的转义。
(我在没有中间 windows 客户端的情况下测试了这个) 第一个插入符号 ^ 是引用 cp 命令所必需的,反斜杠是说服第一个扩展保留引号不变所必需的。

ssh %3@%4 -o ProxyJump %1@%2 ^"cd /media/usbmsd/ && cp \"$(ls -t /media/usbmsd | head -1)\" /buffer'

但是在目标主机上放置脚本应该容易得多mycopyscript.sh

cd /media/usbmsd/ && cp "$(ls -t /media/usbmsd | head -1)" /buffer

然后使用:

ssh %3@%4 -o ProxyJump %1@%2 "./mycopyscript.sh"