Як додати відомий хост 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.