Підключіться через SSH та введіть пароль автоматично, не використовуючи відкритий ключ


20

Сервер дозволяє з'єднання SSH, але не використовує аутентифікацію відкритого ключа. Наразі це не в моїх силах змінити (через технічні труднощі, а не організаційні), але я прийму це якнайшвидше!

Що мені потрібно прямо зараз , щоб виконувати команди на сервері , використовуючи звичайний старий рахунок + пароль аутентифікації з сценарію . Тобто мені це потрібно робити неінтерактивним способом. Це можливо? І як це зробити?

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


2
Які технічні труднощі з включенням автентифікації на основі ключів? Можливо, вам слід задати це питання замість цього чи додатково до цього.
Зоредаче

1
Я це прошу. :-) serverfault.com/questions/125842/… Мені просто потрібен маршрут втечі, оскільки я вже деякий час стукав головою. Але звичайно моя мета - змусити його працювати в довгостроковій перспективі.
Видалено

Відповіді:


22

Існує утиліта Linux sshpass. Це дозволяє робити саме те, що ви хочете, і буде приймати пароль сервера або як аргумент командного рядка, або з файлу (я вважаю за краще таким чином, тому у мене в історії оболонки не відображається пароль сервера), і ви використовуєте його так:

sshpass -f file_with_password ssh user@server ls -la

Це сш на сервер і запуститься ls -la. Одне, однак, вам потрібно спершу вручну запустити ssh на сервер (якщо ви цього ще не зробили), щоб сервер додався до вашого ~/.ssh/known_hosts. Якщо ви цього не зробите, sshpassне вийде.


2
Це не стандартна частина OpenSSH, і буквально жодна з моїх машин (Mac OS X 10.7, Ubuntu 12.04, FreeBSD 8, Debian 3.1) не має ...
voretaq7

@ voretaq7: sshpass - це проект SourceForge: sourceforge.net/projects/sshpass
kevinarpe

1
@KCArpe Я думаю, ви пропустили мою думку ("Весь світ - це не ваша машина Linux - спробуйте вибрати рішення, які працюють в інших місцях"). Використання SSH_ASKPASSзмінної - це більш загальне рішення, яке працює в будь-якій системі з OpenSSH і не потребує встановлення додаткового програмного забезпечення. Для деяких із нас (у регульованих галузях) встановлення нового програмного забезпечення викликає багато адміністративної роботи.
voretaq7

@ voretaq7 Використання SSH_ASKPASSпрацює не у всіх системах. Навіть якщо клієнт його підтримує, він не працюватиме, якщо сервер використовує keyboard-interactive. Я фактично зіткнувся з цією проблемою, коли писав сценарій для розповсюдження authorized_keysфайлу на декілька вбудованих машин.
kasperd

8

Ви можете використовувати Expect для цього. Очевидно, що це не є кращим з точки зору безпеки, оскільки це вимагатиме від вас використання сценарію, що містить ваш пароль в простому тексті. (Але я не буду заважати цьому, оскільки ви сказали у своєму запитанні, що плануєте якомога швидше використовувати автентифікацію відкритих ключів!)


Схоже, це вирішить мою проблему! Я перевірю це завтра. Це не остаточне рішення, але воно пропонує певну безпеку. Коли я думаю про це, якщо користувач сценарію єдиний, хто має право читати сценарій. Тоді він буде настільки ж безпечним, як і мій приватний ключ, який також "захищений" дозволами файлової системи. Або я щось пропустив?
Видалено

Я повернусь із результатами завтра. :-) Дякую за відповідь!
Видалено

Здається, працює. Але sshpass був простішим для цього конкретного випадку IMHO.
Видалено

7

Трохи залежить від мови скрипта, яку ви використовуєте. Я сценарій майже всього в python зараз, де це не проблема. І Pyssh, і Paramiko дозволяють просто скриптувати пароль без суєти.

Якщо ви маєте намір це зробити за допомогою (ba) sh скриптів і використовувати OpenSSH, це стає складніше. OpenSSH явно не дозволяє вводити паролі в командному рядку (оскільки всі користувачі можуть бачити командний рядок, використовуючи щось на зразок ps -fe, що погано. У цьому випадку вам доведеться безпосередньо взаємодіяти з програмою ssh і мати два варіанти:

  • Ви можете написати значну кількість підтримки, використовуючи щось на кшталт Expect.
  • Ви робите злом за допомогою змінної SSH_ASKPASS, кажучи йому викликати програму, що повертає ваш пароль, і запускати все це як пакетне завдання, щоб запобігти його зчитці з терміналу.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.