Назад | Перейти на главную страницу

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

Сервер разрешает SSH-соединения, но не использует аутентификацию с открытым ключом. В настоящее время не в моих силах изменить это (из-за технических трудностей, а не организационных), но я займусь этим как можно скорее!

Что мне нужно сейчас заключается в выполнении команд на сервере, используя простой старый аккаунт + пароль аутентификация от скрипт. То есть мне нужно сделать это неинтерактивным способом. Является ли это возможным? И как мне это сделать?

Клиент, который будет выполнять сценарий, работает под управлением Ubuntu Server 8.04. На сервере работают Cygwin и OpenSSH.

Есть утилита linux под названием sshpass. Он позволяет вам делать именно то, что вы хотите, и будет принимать пароль сервера либо в качестве аргумента командной строки, либо из файла (я предпочитаю этот способ, поэтому мой пароль сервера не отображается в истории оболочки), и вы его используете вот так:

sshpass -f file_with_password ssh user@server ls -la

Это подключит ssh к серверу и запустит ls -la. Одна вещь, однако, вы должны сначала вручную установить ssh на сервер (если вы еще этого не сделали), чтобы сервер был добавлен в ваш ~/.ssh/known_hosts. Если вы этого не сделаете, sshpass не будет работать.

Ты можешь использовать Ожидать сделать это. Очевидно, это нежелательно с точки зрения безопасности, потому что для этого потребуется использовать сценарий, содержащий ваш пароль в виде открытого текста. (Но я не буду вдаваться в подробности, поскольку в своем вопросе вы сказали, что планируете использовать аутентификацию с открытым ключом как можно скорее!)

Немного зависит от используемого вами скриптового языка. Сейчас я пишу почти все на python, где это не проблема. И pyssh, и Paramiko позволяют просто без проблем написать пароль.

Если вы собираетесь сделать это с помощью сценариев (ba) sh и использовать OpenSSH, это станет сложнее. OpenSSH явно запрещает вам вводить пароли в командную строку (поскольку все пользователи могут видеть командную строку, используя что-то вроде ps -fe, что является плохим моджо). В этом случае вам придется напрямую взаимодействовать с программой ssh ​​и иметь два варианта:

  • Вы можете написать значительный объем кода поддержки, используя что-то вроде Expect.
  • Вы делаете взлом, используя переменную SSH_ASKPASS, сообщая ей вызвать приложение, возвращающее ваш пароль, и запустить все это как пакетное задание, чтобы предотвратить чтение с терминала.