Як додати відомий хост SSH у скрипті bash?


13

Я створюю сценарій bash, щоб забезпечити новий сервер, на який можна розгорнути веб-додаток. Я завжди повинен робити це GitHub як відомий хост ssh git@github.com. Як я можу автоматизувати цей процес у bash-скрипті та виконувати це безвідмовно?

Відповіді:


17

Найпростішим способом було б зробити щось подібне.

ssh-keyscan remote_server >>~/.ssh/known_hosts

Якщо це поле абсолютно нове, можливо, вам також знадобиться створити ~/.sshкаталог перед запуском ssh-keyscan .

Майте на увазі, що ssh-keys може приймати довільну кількість імен хостів. Він отримає всі ключі, які може.


1
PS - Для забезпечення ви повинні використовувати щось на зразок лялькового замість баш сценарію. Для лялькових це можна легко впоратися з ресурсом sshkey . Також дивіться це запитання щодо способу управління відомим
Zoredache

2
Це впевнено звучало добре для мене, але, витративши кілька годин за штуку на маріонетку та конкурентів, я снував назад до скриптів та розуму. Якщо ці інструменти інтуїтивно зрозумілі, я, мабуть, не маю інтуїції. YMMV.
Рон Берк

Використовуйте bash. Я постійно стикаюся з проблемами в різних версіях речей, таких як маріонетка або ансібле. Ми завжди повертаємось до башу ... 3 компанії, які зараз працюють так, і bash завжди надійний для нас.
Лігемер

4

Ви намагаєтесь автоматизувати прийняття нового ключа? Якщо так, ви можете використовувати -oStrictHostKeyChecking = ні.
Це дуже погана ідея, оскільки ти зараз повністю відкритий для атаки "людина-в-середині".

Кращим варіантом буде просто керувати відомим файлом і використовувати його знову при наданні нових серверів. Наклейте його на github і напишіть простий скрипт для завантаження цього файлу, перш ніж сшивати в github.

Сувора перевірка ключа хоста - це добре.


Чи можете ви детальніше розробити "керувати відомим файлом_hosts"? Я думаю, що це я хочу зробити, але коли я переглянув файл, його вміст був схожим на якийсь хеш / ключ і не був схожим на те, що потрібно було керувати вручну.
Андрій

2
Забезпечте новий сервер, вручну ssh в github, як би ви хотіли. При запрошенні прийміть ключ хоста. Вийти. Скопіюйте ~ / .ssh / known_hosts з цього нещодавно створеного сервера десь ще (github, веб-сервер, не має значення, доки ви можете його отримати). Наступного разу, коли ви надасте сервер, скопіюйте цей файл назад, перш ніж sshing на github. Вам не потрібно редагувати файл.
yoonix

Це краще, ніж моя відповідь (безпечніше). Подальше вдосконалення відповіді yoonix полягає в тому, щоб проаналізувати "ssh-keyscan github.com" і зберегти повернутий ключ у ~ / .ssh / known_hosts, щоб він не був статичним у файлі десь вам потрібно оновити.
Сірекс

Це теж працювало б, але я б не вважав це кращим. Ви потенційно налаштовуєте себе на атаку "посередника", якщо кожен раз захоплюєте новий ключ хоста.
yoonix

1
Щоб уточнити мій останній коментар (занадто пізно для редагування): Захоплення нового ключа хоста кожного разу, коли ви надаєте хост, функціонально не відрізняється від встановлення StrictHostKeyChecking = ні. З будь-яким із них ви сліпо довіряєте будь-якому ключу, що надсилається щоразу, коли надаєте заявку. Якщо ви вважаєте, що атака MITM є малоймовірною, прочитайте ці дві статті. ГІТУБ був би ВЕЛИЧЕЗНОЮ метою.
yoonix

1

Я не впевнений, що я розумію це питання, але я думаю, що ви хочете ігнорувати відомий рядок знань_host або уникати його повністю; у такому випадку:

ssh -o StrictHostKeyChecking = ні

або інші пропозиції за адресою: http://www.joedog.org/2012/07/ssh-disable-known_hosts-prompt/


Я хочу неінтерактивний спосіб прийняття хост-ключа GitHub (оскільки це відбудеться в баш-скрипті).
Андрій

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