Ответ 1
Я всегда использовал "правильное" решение, но я использовал его в других ситуациях.
Здесь я нашел следующее предложение:
#!/usr/local/bin/expect
spawn sftp -b cmdFile [email protected]
expect "password:"
send "shhh!\n";
interact
Как я могу использовать ожидание отправки пароля для ssh-соединения.
скажем, пароль был p @ssword и команда ssh была ssh [email protected]
Что мне делать с ожиданием ввода пароля, когда он говорит
[email protected] пароль:
Правильное действие с использованием пары ключей SSH не является вариантом, потому что мне нужно будет использовать ssh (scp), чтобы поместить ключ на сервер, который будет запрашивать пароль.
Я всегда использовал "правильное" решение, но я использовал его в других ситуациях.
Здесь я нашел следующее предложение:
#!/usr/local/bin/expect
spawn sftp -b cmdFile [email protected]
expect "password:"
send "shhh!\n";
interact
Не будет ли проще использовать аутентификацию с открытым ключом и использовать ключ без кодовой фразы?
Как пользователь на исходном компьютере делает это, чтобы сделать ключ RSA
ssh-keygen -t rsa
Теперь скопируйте файл ~/.ssh/id_rsa.pub на целевой компьютер и добавьте его в файл authorized_keys целевого пользователя.
Самый быстрый путь вперед (если вы не хотите стать экспертом Tcl, который был бы... необычным... в 2009 году), вероятно, использовать autoexpect
. Здесь man-страница:
http://expect.nist.gov/example/autoexpect.man.html
Вкратце, запустите autoexpect
, запустите сеанс ssh, закончите то, что вам нужно сделать, прекратите автоматическое прогнозирование, а затем избили свою клавиатуру в результате беспорядка, пока он не сработает:) Я предполагаю, что вам не нужно что-то большее, чем быстрый взломать, чтобы ваши ключи разобрались, а потом, ну это звучит так, как будто вы уже знаете счет.
И там этот вопрос, который уже содержит пример, близкий к тому, что вы ищете.
Ключевое решение не будет работать... потому что ключи должны быть доступны только для пользователя, выполняющего ssh. На xp вы не можете создать ключевую структуру с правильными разрешениями. Поэтому ssh не будет их читать. Возможно, это изменилось, но последнее, что я проверил, все еще не работает.
Cygwin имеет autoexpect только в пакете bin. запустите setup.exe и выполните поиск и установите флажок источника. вы увидите результирующее дерево в /usr/src и там будет каталог expect/expect/examples. в нем хранится копия autoexpect script.
Я уверен, что делать то, что вы пытаетесь сделать, невозможно. Большинство приложений * nix, которые запрашивают пароль, считанный из TTY напрямую, а не stdin, поэтому вы не можете подключить пароль. Вы можете, как указали другие, настроить SSH, чтобы не запрашивать пароль, как объяснялось здесь.
После того, как я был замедлен без видимых причин, я пошел и сделал еще немного исследований команды expect
и обнаружил, что у нее есть команда send_tty
, которая отправляет /dev/tty вместо stdin, что может на самом деле делай, что хочешь... Я раньше не знал об этой функции. Тем не менее, я по-прежнему рекомендую поместить ключ на сервер.