SSH в коробку з часто змінюваним IP-адресою


22

У мене є кілька хмарних коробок, які часто змінюють IP-адресу.

Я ssh за допомогою імені хоста, але мушу редагувати відомий файл_hosts щоразу, коли сервер запускається через це повідомлення про помилку:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is

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

Відповіді:


20

Відредагуйте файл ssh_config і додайте зміни цього рядка:

CheckHostIP no

За замовчуванням CheckHostIP встановлено значення "так". Що для цього потрібно зробити лише той вид перевірки, якого ви не виконуєте. Якщо вимкнути його, це означає, що він просто довіряє, що IP-код є змінним, і буде перевіряти ключ на ім'я хоста.


2
Це вимикає функцію безпеки для всіх серверів, до яких ви коли-небудь підключитесь, що є надзвичайно поганою практикою. Натомість ви повинні використовувати цю опцію лише для конкретного хоста, який, як ви знаєте, матиме цю проблему - або використовувати параметр HostKeyAlias ​​- знову для конкретного хоста.
zaTricky

@zaTricky "Надзвичайно погана практика"? Що так екстремального в цьому хм? Я думаю, що це приблизно так само безпечно, це просто індивідуальна перевага. Ви просто закріпіть ключ до імені хоста (замість IP). Для https HPKP працює аналогічно, і всі кажуть, що це або захищено, або надмірно безпечно.
kubanczyk

@kubanczyk Це говорить про те, щоб зробити це глобальним налаштуванням - жодних порад щодо вказівки хоста, що я і зазначив
zaTricky

25

Доповнення: ви можете спробувати лише відключити чек CheckHostIP для цього імені:

Host *
  [ global settings .. ]

Host very.dynamic.host
  CheckHostIP no

5
Це найкращий варіант для зниження впливу на безпеку відключення перевірки IP-адреси.
Еспо

3

Багато відповідей тут спрацює - але технічно вони обходять. OpenSSH вже має вбудовану функцію з цим на увазі: HostKeyAlias.


У своєму .ssh / config-файлі додайте HostKeyAlias <alias>до конфігурації хоста:

host myserver.example.com
HostKeyAlias myserver.example.com

При цьому на місці, при підключенні до сервера myserver.example.comне використовуватиме ім'я хоста або IP - адреса для локальної довідки - він завжди буде тільки використовувати дані HostKeyAlias при підключенні до сервера. Для мене є сенс використовувати ім'я хоста - але ви, звичайно, можете використовувати будь-який псевдонім, який вам подобається.


Типові для мене динамічні хости такі:

host myserver
hostname myserver.dyn.example.com
HostKeyAlias myserver.private.example.com

Це також можна використовувати в деяких незрозумілих сценаріях, коли ви знаєте, що у ваших серверів є однакові ключі хоста (як правило, це не повинно бути). Це дозволить запобігти повторенню записів. Надалі, якщо ключі законно змінюються, вам не доведеться замінювати / видаляти кілька записів. Тільки один. Гарні приклади цього - сервери Gitlab Geo.


Щодо очищення файлу known_hosts, я б запропонував переглянути інші запитання / відповіді, спеціально пов'язані з підтримкою / видаленням застарілих відомих записів. Наприклад, див. Як керувати моїм .ssh / known_hosts файлом ; Мене особливо вразила відповідь user1953828, хоча я бачу, що вона не має багато відгуків (поки). :)


Це свідчить про те, яке значення має відповідь у той самий день щодо ПЗ проти правильної відповіді, на яку відповіли через 8 років.
parity3

2

Я використовую ці хитрі варіанти, щоб вирішити цю проблему. (Відкритий ключ мого хоста відновлюється досить часто. Тому це знімає перевірку IP та Key)

ssh remoteServerName -l username -o "UserKnownHostsFile=/dev/null"

Ви також можете просто скористатися цим, якщо ключ залишається таким же, але змінити IP-адресу:

ssh remoteServerName -l username -o "CheckHostIP=no"

Якщо ваш сервер часто змінює хост-ключі, вам варто подумати про налаштування підписання ключа-хоста
Cameron Tacklind

1

Ви можете встановити StrictHostKeyChecking = ні в конфігурації клієнта ssh (тобто файл ~ / ssh / config на машині, до якої ви підключаєтесь), щоб ігнорувати попередження.


1

Ви можете помістити CheckHostIP noу свій ~/.ssh/configфайл, але це залишає вас відкритими для атак підробки. Якщо вас це не турбує, цей параметр повинен відключити known_hostsчек.


0

Я уникаю додавання відбитків пальців до мого known_hostsфайлу під час підключення до перехідних машин AWS. Я використовую таку команду, як

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i secret.pem ec2-user@10.0.0.5

підключитися до них. Він не буде питати вас , якщо ви хочете додати машину «до списку відомих хостів.» Замінити 10.0.0.5на IP - адреса вашого комп'ютера і secret.pemна повному шляху ключа Ssh. Ви все одно отримаєте попередження про те 10.0.0.5, що додано, але воно справді зникло /dev/null. Я роблю це досить часто, щоб встановити псевдонім у своєму~/.profile

alias awsssh='ssh -i secret.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Я зарезервував ssh ec2-user@example.comкоманди типу машин, якщо мені не вдалося перевірити відбиток пальця.


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

-2

Зробіть відомі_хости лише для читання.


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