додавання пароля до .ssh / config


24

Я використовую ubuntu 12.04. Я щодня використовую ssh для підключення до багатьох серверів, тому я ввожу їх параметри у .ssh / config файл; подобається це :

Host server1
User tux
Port 2202
HostName xxx.x.xx.x

Чи є спосіб ввести паролі в цей файл для кожного з'єднання? Отже, коли сервер запитує пароль, термінал ставить свій пропуск і відправляє його на сервер, тому мені не потрібно вводити пароль кожен раз. Крім того, я не хочу використовувати пару відкритих / приватних ключів.


10
Це те, для чого складаються клавіші.
Майкл Хемптон

Відповіді:


31

Ні, не існує способу вказувати або надавати в командному рядку пароль неінтерактивним способом для аутентифікації ssh за допомогою вбудованого механізму opensh. Принаймні, не те, що я знаю. Ви можете жорстко ввести свій пароль у сценарій очікування, але це теж не гарне рішення.

Ви, безумовно, хочете використовувати keypairs для аутентифікації без паролів, як заявив Майкл, врешті-решт приватний ключ є великим паролем у файлі.


Річ у тому, що його сервери моїх клієнтів, і вони не дозволяють входити в систему за допомогою ключів. Я пишу bash-скрипт, використовуючи очікування для входу на всі сервери, де зберігаються облікові дані, взяті з пристрою зберігання usb. Спасибі
Айо Августин

1
Досить невпевнено. Єдине, що можна запропонувати в цьому сценарії, щоб заблокувати цей файл із жорсткими дозволами на файл.
Даніла Ладнер

1
Якщо вони не дозволяють клавішам, вони неправильно розуміють, як працює ssh - дозволяючи вхід пароля відкриває вам атаки на словники тощо (хоча і дуже, дуже повільні) - це неможливо зробити те ж саме з парою приватних ключів, і якщо вони Ви переживаєте за те, що ключі потрапляють в чужі руки, ви можете зашифрувати приватну частину ключа паролем, щоб мати можливість використовувати два фактори (пароль також можна запам'ятати у вашому брелоку / вашим агентом ssh )
Алекс Беррі

Навчіть своїх клієнтів. Поясніть їм, що краще вимкнути автентифікацію пароля і дозволити лише ключі, які зворотні.
Микита Кіпріянов

20

Щоб уникнути рядку коментарів: Так, це небезпечно (навіть не мабуть, небезпечно). Я настійно рекомендую робити це лише в лабораторній ситуації в ізольованій мережі або подібній ситуації, яка не передбачає виробничих серверів або потенційно виробничого сервера без повного скидання / формату.

Я хотів налаштувати це, оскільки я не думаю, що мій перемикач 2950 підтримує приватні / відкриті ключі, і я сподіваюся, що в якийсь момент отримати ці знання, але я ще не там.

Використовуючи псевдонім і sshpass, це може бути досягнуто.

  1. Встановіть sshpass
  2. Змініть свій .ssh / config файл, щоб він включив ім'я користувача, як зазначено у питанні
  3. Додайте псевдонім до свого терміналу (я використовував .bashrc і рекомендував би проти налаштувань gloabl)
  4. Використовуйте псевдонім для входу в ціль

Мій приклад псевдонім:

alias ssc='sshpass -pcisco ssh'

Де "cisco" - пароль. Зауважте, що між -p та паролем немає місця.

Використання (посилання на питання):

ssc server1

Примітка. Це відповідає на головне запитання лише тим, хто використовує пошукові системи. Якщо ви використовуєте сервери, наприклад приклад запитання, слід використовувати приватні / відкриті пари ключів, а не цю відповідь


Єдине можливе рішення, коли ви дійсно не можете працювати з ключами з будь-якої причини.
sjas

Працює! Дивовижно.
Рахул

Я б запропонував замінити псевдонім на повний скрипт оболонки; це дасть можливість динамічно вибрати, який файл пароля використовувати, залежно від хост-параметра.
7heo.tk

Можна дуже добре поставити пробіл між -p та паролем, як це часто буває з програмами cli ...
masterxilo

10

Так, як було сказано вище, немає можливості просто зберегти пароль. Я рекомендую використовувати ключ ssh для авторизації.

спочатку створіть свій ключ:

ssh-keygen

Потім скопіюйте ключ навколо на ваших серверах / робочих столах:

ssh-copy-id -i .ssh/id_rsa.pub user@ip-address:

Це все. Вам більше ніколи не запитають пароль.

Я також рекомендую взагалі видалити авторизацію пароля, але це залежить від вас.


1
Дякуємо за посилання на ssh-copy-id! Раніше я використовував деякі засоби контрацепції, sshpass -p $PASSWORD ssh $USERNAME@$HOST "echo `cat ~/.ssh/id_rsa` >> /home/$USERNAME/.ssh/authorized_keys"але ця програма чистіша і робить наміри зрозумілими.
masterxilo

3

Немає способу зробити це з ssh, це так само небезпечно, наскільки це можливо.

Як Даніла згадував, ви можете використовувати сценарії очікування, але я б не переймався.

Цікаво, чого ви намагаєтесь досягти? Ви хочете перейти з одного сервера на інший? У цьому випадку потрібно налаштувати та використовувати ssh-агент на своїй робочій станції та включити переадресацію агента на цільових хостах; таким чином, обмін обліковими записами з перенаправляється до вашого місцевого агента без копіювання приватного ключа.


VisualStudio має концепцію особистих жетонів доступу, які є на зразок конкретних паролів додатків, де ця функція буде корисною.
спудер

1

Я використовую цей скрипт з ~/.local/binкаталогу

#!/usr/bin/bash

ORIG_SSH=/usr/bin/ssh
HOST=$1

SSHPASS=$(grep -Pzo "Host $HOST"'\s*\n((?!Host).*\n)*#PS\s(\N+)\n' ~/.ssh/config|tail -n 2|head -n 1 | sed 's/#PS //')
if [ -n $SSHPASS ]; then
    export SSHPASS
    sshpass -e $ORIG_SSH $@
else
    $ORIG_SSH $@
fi

Що дозволяє мені вказати парольну фразу як #PS <password>у .ssh/configфайлі.

Але, як всі говорять, що краще використовувати ssh-keysз , ssh-agentколи це можливо


0

Правильний спосіб вирішити цю ситуацію - використовувати ssh-агент на основі сеансу. Ось як:

$ eval `ssh-agent`
$ ssh-add /home/user/.ssh/your_key
Enter passphrase for /home/user/.ssh/your_key:

Потім пароль залишатиметься дійсним протягом решти сеансу. Першу команду потрібно виконати лише один раз, після чого можна додати стільки клавіш, скільки вам потрібно. Коли сеанс вбивається, так це і агент, тому немає жорсткого кодування зберігання пароля.

Шокований, що після такої тривалої відповіді тут не було!


Причиною цього не було, ймовірно, плакат спеціально сказав, що він не хоче використовувати пару публічних / приватних ключів.
Дженні Д каже, що повернемо Моніку

1
Я пропустив це, дякую. Тоді додам, що не використовувати ключ для SSH - це дійсно, дуже погана ідея. Це більш безпечно І зручніше ... Я б закликав ОП переглянути. Використання ключового слова без парольної фрази набагато безпечніше, ніж відсутність введення пароля та пароля. Але в ідеалі можна використовувати ключ з парольною фразою і використовувати кроки, які я надав, якщо / коли вони перебувають на сеансі, який вимагає зберігання їх парольної фрази.
pranalli

-1

Це можна зробити більш безпечним способом, використовуючи sshpass

  1. Встановіть свій пароль без історії

    export PS = your_password ; історія -d $ (історія 1)

  2. Встановіть псевдонім хоста, як зазначено вище в ~ / .ssh / config

  3. Використовуйте ssh pass для використання змінної середовища та увійдіть в потрібну машину в одній команді

sshpass -p $ PS ssh host_alias

У вашому оточенні зберігається ваш пароль, і ризиковано, що будь-які виконувані сценарії можуть випустити цей пароль, якщо ви не знаєте, що ви працюєте


Ні, це не безпечно. І це зовсім некрасиво.
7heo.tk

Хіба це "рішення" довше проблеми? Усі ці додаткові кроки, і вам потрібно ще набратиsshpass -p $PS ...
Dan H
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.