як уникнути запитання дозволу на SSH?


57

Ми намагаємось прискорити встановлення вузлів Oracle для встановлення RAC. для цього потрібно встановити і налаштувати ssh, щоб він не запросив пароль.

Проблема полягає в тому, що: при першому використанні нам буде запропоновано

RSA key fingerprint is 96:a9:23:5c:cc:d1:0a:d4:70:22:93:e9:9e:1e:74:2f.
Are you sure you want to continue connecting (yes/no)? yes

Чи є спосіб цього уникнути чи ми приречені підключатися хоча б раз на кожному сервері з кожного сервера вручну?

Відповіді:


90

Встановіть StrictHostKeyChecking noу своєму /etc/ssh/ssh_configфайлі, де це буде глобальний варіант, який використовує кожен користувач на сервері. Або встановіть його у своєму ~/.ssh/configфайлі, де він буде за замовчуванням лише для поточного користувача. Або ви можете використовувати його в командному рядку:

ssh -o StrictHostKeyChecking=no -l "$user" "$host"

Ось пояснення, як це працює з man ssh_config (або дивіться цю більш поточну версію ):

StrictHostKeyChecking

      Якщо цей прапор встановлено на "так", ssh ніколи не додаватиме до нього ключі хоста $HOME/.ssh/known_hostsі відмовляється підключитися до хостів, хост-ключ яких змінився. Це забезпечує максимальний захист від нападів троянських коней, однак, це може дратувати, коли /etc/ssh/ssh_known_hostsфайл погано підтримується або часто підключаються нові хости. Цей параметр змушує користувача вручну додавати всі нові хости. Якщо для цього прапора встановлено значення "ні", sshавтоматично додасть нові хост-ключі до відомих користувачеві файлів хостів. Якщо цей прапор встановлений на "запитувати", нові хост-ключі будуть додані до відомих користувачеві файлів хостів лише після того, як користувач підтвердив, що це дійсно хоче зробити, і ssh відмовиться підключатися до хостів, ключ хоста яких змінився . Ключі хостів відомих хостів будуть перевірені автоматично у всіх випадках. Аргумент повинен бути "так", "ні" або "запитати". За замовчуванням - "запитати".


1
+1, я також це для своїх серверів. І щоб було зрозуміло, повідомлення у запитанні надходить від ssh-клієнта на комп'ютері підключеного клієнта, а не з сервера.
Паткос Чаба

3
Ця відповідь звучить як проблема безпеки в процесі створення.
SunSparc

25

ssh-keyscan - Зберіть відкриті ключі ssh

Якщо ви вже знаєте список хостів, до яких ви підключитесь, ви можете просто видати:

ssh-keyscan host1 host2 host3 host4

Ви можете дати -Hможливість мати хеш-результати, такі як ssh за замовчуванням

Крім того, ви можете дати -t keytypeбули KeyType це dsa, rsaабо ecdsaякщо у вас є переваги, який тип ключа , щоб захопити замість значення за замовчуванням.

Після запуску ssh-keyscanвін попередньо заповнить ваш відомий файл-хости, і у вас не буде запитуватися дозволу на додавання нового ключа.


1
Я трохи спантеличений коментарем "буде попередньо заповнений" коментар ... відомі_хости не створюються та не змінюються після запуску цього. Ви маєте на увазі, що вміст може бути передано у файл, щоб заповнити його?
rschwieb

4
Підтвердження з techrepublic.com/article / ... . ssh-keyscan -H myhost >> ~/.ssh/known_hosts, або для сервера,/etc/ssh/ssh_known_hosts
cole

12

Ви можете додати відбиток пальця до відомих_хостів кожного сервера. Для одного користувача:

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts

3
Це вже не правильний спосіб зробити це з моменту введення хешування.
Deim0s

10

Ігноруйте господаря

Ігноруйте перевірку HostKeyChey. Для цього я використовую, наприклад:

ssh -oStrictHostKeyChecking=no -oUserKnownHostsFile=/dev/null user@example.net

Додати хост

Додайте відбиток хоста / сервера .ssh/known_hostsдо першого з'єднання. Це безпечніший спосіб.


Привіт. Oracle видає команду ssh, щоб у мене немає контролю над тим, як вона це виконує.
Ніколя де Фонтеней

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

(2) Звичайно, ідеальний підхід - додавання відбитка пальця до відомого файлу хостів - але як це зробити? (1) Чому вигідно встановити відомий користувачу файл хостів  /dev/null? Хіба не було б краще зробити ssh -oStrictHostKeyChecking=no user@example.netодин раз, щоб отримати відбиток сервера у $HOME/.ssh/known_hostsфайл, тож наступні з'єднання будуть продовжуватися без запиту на підтвердження?
G-Man

3

Виконайте наступний фрагмент перед спробою.

mkdir -p ~/.ssh     
echo "Host *" > ~/.ssh/config     
echo " StrictHostKeyChecking no" >> ~/.ssh/config

ps: Суворо не для виробничих серверів, остерігайтеся ManInMiddle


0

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

# this example shows wildcard for IP
# you can even use more than one wildcard 10.0.*.* for example
Host 192.168.56.*
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
# you can even alias it, which is really useful when scp'ing/rsyncing foo:/path/to/remote
Host foo
    HostName foo-long-192-10-135-55.hostname.not-going-to-remember.doh
    StrictHostKeyChecking no
    UserKnownHostsFile /dev/null
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.