как избежать ssh спрашивая разрешения?

59

Мы пытаемся ускорить установку узлов 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

Есть ли способ избежать этого или мы обречены хотя бы один раз подключаться к каждому серверу с каждого сервера вручную?

Николя де Фонтене
источник

Ответы:

92

Укажите 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его, он предварительно заполнит ваш файл known-hosts, и у вас не будет ssh, запрашивающего у вас разрешение на добавление нового ключа.

kurtm
источник
1
Я немного озадачен комментарием "будет предварительно заполнен" ... known_hosts не создается и не изменяется после выполнения этого. Вы имеете в виду, что содержимое может быть передано в файл, чтобы заполнить его?
rschwieb
4
Подтверждение с techrepublic.com/article/… . ssh-keyscan -H myhost >> ~/.ssh/known_hostsили для всего сервера/etc/ssh/ssh_known_hosts
Коул
12

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

cat ~/.ssh/known_hosts
echo "$SERVER,$PORT ssh-rsa $SERVER_KEY_FINGERPRINT" >> ~/.ssh/known_hosts
Дэвид Соутер
источник
3
Это больше не правильный способ сделать это с тех пор, как было введено хеширование.
Deim0s
10

Игнорировать Хост

Игнорировать HostKeyChecking. Для этого я использую, например:

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

Добавить хост

Добавьте отпечаток хоста / сервера .ssh/known_hostsдо первого подключения. Это более безопасный способ.

xebeche
источник
Здравствуй. Oracle выполняет команду ssh, поэтому я не могу контролировать, как она это выполняет.
Николас де Фонтене
Upvoted. Большинство ответов, которые я видел, не содержат упоминания о том, что dev обнуляет известный файл hosts. Это делает команду намного более удобной в использовании и не разрушит существующую конфигурацию.
Алекс
(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

147.3k
источник
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
Jaime
источник