#batch-file #redirect #scp
Вопрос:
Я пытаюсь выполнить ряд команд, для которых требуется пароль пользователя, поэтому я запрашиваю пароль в начале сценария и перенаправляю команду с помощью |
(перенаправление по каналу).
В документации я нашел синтаксис:
set password=secretpassword
echo %password% | command that prompt for password
Я попытался с помощью команды scp скопировать один файл с сервера со следующим кодом:
echo %password% | scp myuser@serverip:/home/myuser/myfile ./myfile
но это не сработало.
Но этот код почему-то работает:
echo %password | %scp myuser@serverip:/home/myuser/myfile ./myfile
Я не понял, почему, возможно, интерпретация трубы внутри %% отличается.
Основная проблема заключается в том, что, когда я передаю параметры команде, например, рекурсивно получаю папку, это не работает. Пример:
echo %password | %scp -r myuser@serverip:/home/myuser/myfolder ./myfolder
Я знаю, что есть и другие лучшие методы, такие как использование аутентификации по паре ключей вместо пароля, но я хочу понять, почему это не работает.
Комментарии:
1.
%password | %
это абсолютно НЕ ДОЛЖНО работать, и в вашем пароле почти наверняка есть какой-то символ, который делает вещи странными.2. Вероятно, тот самый ! или символ@.. Но это вводится пользователем, есть ли какой-нибудь способ избежать этого текста? Если я использую
echo %password%
! отсутствует, но сecho !password!
тем ! есть, но перенаправление на scp не работает3. Не прямое решение вашей проблемы, а подсказка.
ssh
и его друзья должны использоваться с открытыми/закрытыми ключами, а не с паролями4.
echo %password% | …
отображает содержимое переменнойpassword
с последующим пробелом в канале; лучшее использованиеcmd /D /V /C echo(!password!| …
(учитывая, что в экземпляре интерпретатора команд хостинга отключено отложенное расширение)…