Я пишу учебное пособие по настройке Ceph трудным путем, полностью обшивая.
Меня не устраивает количество команд ssh, необходимых для подключения к удаленному хосту от имени пользователя root, создания нового пользователя, затем ключей scp ... Должен быть более умный и простой способ - особенно в Ubuntu.
Вот точная проблема: локальный пользователь FOO, имеющий доступ к удаленному серверу с пользователем ROOT, должен установить ключи (и, возможно, пользователя) также для пользователя CEPH. Повторите n раз с n удаленными хостами.
Какие-нибудь умные однострочники мне не хватает?
текущие шаги:
scp -i digitalocean id_rsa.pub storage-1:/root
ssh -i digitalocean storage-1
useradd ceph
mkdir ~ceph/.ssh
cat id_rsa.pub >> ~ceph/.ssh/authorized_keys
chmod 700 ~ceph/.ssh
chmod 600 ~ceph/.ssh/authorized_keys
chown ceph:ceph ~ceph/.ssh/authorized_keys
chown ceph:ceph ~ceph/.ssh/
rm id_rsa.pub
Поскольку это - Цифровой Океан, проблема может быть решена путем установки userdata как часть начальной облачной начальной загрузки экземпляра - следующее создаст ceph пользователя, поместит его в sudoers группу и настроит ключи SSH, требуемые обеспечить, входят в систему.
#cloud-config
users:
- name: ceph
groups: sudo
shell: /bin/bash
sudo: ['ALL=(ALL) NOPASSWD:ALL']
ssh-authorized-keys:
- ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDf0q4PyG0doiBQYV7OlOxbRjle026hJPBWD+eKHWuVXIpAiQlSElEBqQn0pOqNJZ3IBCvSLnrdZTUph4czNC4885AArS9NkyM7lK27Oo8RV888jWc8hsx4CD2uNfkuHL+NI5xPB/QT3Um2Zi7GRkIwIgNPN5uqUtXvjgA+i1CS0Ku4ld8vndXvr504jV9BMQoZrXEST3YlriOb8Wf7hYqphVMpF3b+8df96Pxsj0+iZqayS9wFcL8ITPApHi0yVwS8TjxEtI3FDpCbf7Y/DmTGOv49+AWBkFhS2ZwwGTX65L61PDlTSAzL+rPFmHaQBHnsli8U9N6E4XHDEOjbSMRX f2@digitalocean
я все еще полагаю, что должен быть умный способ сделать это не вовлечение облачной матрицы.
Часть Вашей проблемы заключается в создании .ssh
. Что я сделал бы использование использования ssh-keygen
, который создаст его, если не будет существовать и полномочия набора правильно (и, конечно, создавать пару ключей для пользователя).
$ scp -i digitalocean id_rsa.pub storage-1:/tmp
$ ssh digitalocean storage-1 '
adduser --gecos "" --disabled-password ceph
echo | sudo -u ceph ssh-keygen -N "" -f ~ceph/.ssh/id_rsa
sudo -u cp /tmp/id_rsa.pub ~ceph/.ssh/authorized_keys
'
Примечания:
adduser
вместо useradd
- это создает скелетный корневой каталог, от /etc/skel
.--gecos ""
и --disabled-password
используются, чтобы не запрашивать. Если Вы не возражаете против подсказок для имени и пароля, Вы пропускаете эти опции.ssh-keygen
может создать .ssh
с правильными полномочиями-N ""
и -f ~ceph/.ssh/id_rsa
используются для предотвращения подсказок. Можно пропустить их, если Вы не возражаете против подсказок для ключевого объекта (для которого значение по умолчанию хорошо), и если Вы хотите установить пароль..ssh
ни .ssh/authorized_keys
потребность иметь 700
как режим. Пока только владелец может записать в них, это прекрасно (755
для .ssh
и 644
для .ssh/authorized_keys
очень хорошо).Я нашел более универсальное решение путем изменения ответа на этот вопрос для выполнения этого при входе в систему как другой пользователь:
cat ~/.ssh/id_rsa.pub | ssh root@storage-1 'useradd ceph; umask 0077; mkdir -p ~ceph/.ssh; cat >> ~ceph/.ssh/authorized_keys && echo "Key copied"'
Можно использовать ssh-copy-id
для передачи ключа SSH к удаленному хосту.
mallard@steamroller:~$ ssh-copy-id mallard@puter
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
Password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'mallard@puter'"
and check to make sure that only the key(s) you wanted were added.
Это автоматически создает каталоги (такой как .ssh
) и устанавливает их на корректные полномочия.