Мне нужно развернуть переменные перед запуском SCP
команда, в результате я не могу использовать одинарные кавычки. Если я запустил скрипт, используя двойные кавычки в Powershell ISE
работает нормально.
Но не работает, если я запускаю скрипт через командную строку.
Я использую zabbix для запуска скрипта, который вызывает скрипт как [cmd /C "powershell -NoProfile -ExecutionPolicy Bypass -File .\myscript.ps1"]
Вот код, который необходим для запуска SCP с помощью Cygwin bash.
if ((test-path "$zipFile"))
{
C:\cygwin\bin\bash.exe -l "set -x; scp /cygdrive/e/logs/$foldername/dir1/$foldername.zip root@10.10.10.10:~/"
}
Вывод:
/usr/bin/bash: set -x; /cygdrive/e/logs/myfolder/dir1/server.zip root@10.10.10.10:~/: No such file or directory
Если я запустил ту же команду в Cygwin вручную, она сработает.
Я даже пытался использовать bash -l -c
но тогда сеанс SSH зависает, возможно, потому что root@10.10.10.10
становится $ 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.
Догадаться. Он останавливался при использовании 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 root@10.10.10.10:~/")