Я столкнулся с проблемой, как добиться входа без пароля между любыми двумя узлами в кластере серверов. Теперь у меня есть кластер серверов, состоящий из 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
для перебора серверов.