SCP
由于不能使用单引号,因此 我需要在运行命令之前扩展变量。如果我使用双引号运行脚本,Powershell ISE
它可以正常工作。
但如果我通过命令提示符运行脚本则不起作用。
我正在使用 zabbix 运行该脚本,该脚本调用如下[cmd /C "powershell -NoProfile -ExecutionPolicy Bypass -File .\myscript.ps1"]
这是需要使用 Cygwin bash 运行 SCP 的代码。
if ((test-path "$zipFile"))
{
C:\cygwin\bin\bash.exe -l "set -x; scp /cygdrive/e/logs/$foldername/dir1/$foldername.zip [email protected]:~/"
}
输出:
/usr/bin/bash: set -x; /cygdrive/e/logs/myfolder/dir1/server.zip [email protected]:~/: No such file or directory
如果我在 Cygwin 中手动运行上述相同的命令,它就可以工作。
我甚至尝试使用bash -l -c
,但后来 SSH 会话卡住了,可能是因为[email protected]
根据文档,它变成了 1 美元。
-c If the -c option is present, then commands are read from
the first non-option argument command_string. If there are
arguments after the command_string, the first argument is
assigned to $0 and any remaining arguments are assigned to
the positional parameters. The assignment to $0 sets the
name of the shell, which is used in warning and error
messages.
答案1
搞清楚了。使用时它停止运行bash -c
是因为StrictHostKeyChecking
已知主机的问题(会提示您输入是/否)。我将-v
开关设置为SCP
,它向我显示了它停止运行的位置的调试日志。
必须设置scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null
选项。
完整的行现在如下所示:
c:\$cygwin_folder\bin\bash.exe -c ("/usr/bin/scp -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -v -i /cygdrive/c/cygwin/home/myuser/.ssh/id_rsa /cygdrive/e/logs/$foldername/dir1/$foldername.zip [email protected]:~/")