Использование ожидаем, чтобы передать пароль в SSH - PullRequest
36 голосов
/ 20 января 2009

Как я могу использовать ожидаемый, чтобы отправить пароль для подключения SSH.

скажем, пароль был p @ ssword и команда ssh была ssh me@127.0.0.1

Что бы я сделал, если бы он заставил его ввести пароль, когда он говорит

me@127.0.0.1 пароль:

Правильное действие по использованию пары ключей SSH не вариант, потому что мне пришлось бы использовать ssh (scp), чтобы поместить ключ на сервер, который запрашивал бы пароль.

Ответы [ 6 ]

70 голосов
/ 20 января 2009

Я всегда использовал «правильное» решение, но я использовал ожидание в других ситуациях.

Здесь Я нашел следующее предложение:

#!/usr/local/bin/expect
spawn  sftp  -b cmdFile user@yourserver.com
expect "password:"
send "shhh!\n";
interact
5 голосов
/ 20 января 2009

Не проще ли использовать аутентификацию с открытым ключом и использовать ключ без ключевой фразы?

Когда пользователь на исходном компьютере делает это для создания ключа RSA

ssh-keygen -t rsa

Теперь скопируйте ~ / .ssh / id_rsa.pub на целевой компьютер и добавьте его в файл авторизованный ключ целевого пользователя

4 голосов
/ 20 января 2009

Ваш самый быстрый путь вперед (если вы не хотите стать экспертом по Tcl, что было бы ... необычно ... в 2009 году), вероятно, использовать autoexpect. Вот справочная страница:

http://expect.nist.gov/example/autoexpect.man.html

Короче говоря, запустите autoexpect, запустите сеанс ssh, завершите то, что вам нужно сделать, прекратите автоматическое ожидание, а затем стучите по клавиатуре по полученному беспорядку, пока он не заработает :) Я предполагаю, что вам не нужно что-то большее, чем быстрый взлом, чтобы разобраться с вашими ключами, и тогда, ну, похоже, вы уже знаете счет с этим.

И есть этот вопрос , который уже содержит пример, близкий к тому, что вы ищете.

0 голосов
/ 29 января 2013

Решение для ключей не будет работать ... потому что ключи должны быть доступны для чтения только человеку, работающему с ssh. На XP вы не можете создать структуру ключа с правильными разрешениями. Так что ssh не будет их читать. Возможно, это изменилось, но в последний раз я проверял, что все еще не работает.

0 голосов
/ 06 августа 2011

Cygwin имеет автоматическое ожидание, но его нет в пакете bin. запустите setup.exe, найдите ожидаемый и установите флажок источника. Вы увидите результирующее дерево в / usr / src, и там есть каталог ожидаемых / ожидаемых / примеров. там живет копия сценария autoexpect.

0 голосов
/ 20 января 2009

Я почти уверен, что невозможно сделать то, что вы пытаетесь сделать. Большинство * nix-приложений, которые запрашивают пароль, читается напрямую из TTY, а не из stdin, поэтому вы не можете передать пароль. Как уже упоминалось, вы можете настроить SSH, чтобы он не запрашивал пароль, как объяснено здесь .

После того, как за меня проголосовали без видимой причины, я пошел и немного больше изучил команду expect и обнаружил, что у нее есть команда send_tty, которая отправляет / dev / tty вместо stdin, что на самом деле может делай что хочешь ... Раньше я не знал об этой функции. Тем не менее, я рекомендую поставить ключ на сервере.

...