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

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

Я столкнулся с проблемой, как добиться входа без пароля между любыми двумя узлами в кластере серверов. Теперь у меня есть кластер серверов, состоящий из 10 узлов со следующими IP-адресами:

192.168.0.1 # node1
192.168.0.2 # node2
...
192.168.0.10 # node10

Мои имена пользователей на этих трех узлах — все xyz, а системы на этих узлах — все Ubuntu14.04.

Кажется, это канонический вопрос, и на него должен был быть дан ответ во многих местах, но мой поиск с помощью Google дал мне решение только для двух узлов. Например, передать сгенерированный открытый ключ в node1файл authorized_keys, node2, ..., node10чтобы разрешить вход без пароля с node1остальных узлов. Но как масштабировать этот метод на любые два узла в кластере серверов? следует ли нам вручную генерировать открытый ключ в каждом узле и копировать открытый ключ каждого узла на остальные узлы? Есть ли общий и удобный метод?

решение1

Если у вас кластерная настройка, у вас, скорее всего, есть общая файловая система. Если так, то вы можете просто добавить ключ SSH на сам сервер. Если он подключается к другому серверу, он найдет свой собственный ключ в списке авторизованных ключей. Тогда вы сможете подключаться с любого сервера к любому серверу.

В случае, если у них разные файловые системы, вам нужно сделать это вручную. Либо вы создаете новый ключ SSH для пользователя xyzи ssh-copy-idдля каждого из других серверов. Это масштабируется как N² с количеством серверов, это не круто.

Вы можете сгенерировать один ключ SSH и скопировать его на все машины в /home/xyz/.ssh/id_rsaи id_rsa.pub. Затем зарегистрировать этот ключ на всех машинах. Теперь вы можете войти с любого сервера на любой другой сервер, используя тот же ключ SSH.

Чтобы развернуть это, я бы написал быстрый скрипт, который использует scpцикл forдля перебора серверов.

Связанный контент