Je suis en train d'écrire un tutoriel sur la mise en place de Ceph à la dure, Shell jusqu'au bout.
Je ne suis pas satisfait du nombre de commandes ssh nécessaires pour se connecter à un hôte distant en tant que root, créer un nouvel utilisateur, puis les clés scp dessus ... il doit y avoir un moyen plus intelligent et plus simple - en particulier sur Ubuntu.
Voici le problème exact: l'utilisateur local FOO qui a accès au serveur distant avec l'utilisateur ROOT doit configurer les clés (et éventuellement l'utilisateur) pour l'utilisateur CEPH. Répétez n fois avec n hôtes distants.
Un one-liners intelligent me manque?
étapes en cours:
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
Comme il s'agit de Digital Ocean, le problème peut être résolu en définissant les données utilisateur dans le cadre du démarrage initial de l'instance en nuage. Ce qui suit créera un utilisateur ceph, le mettra dans le groupe sudoers et configurera les clés SSH requises pour fournir la connexion.
#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
Je crois toujours qu'il devrait y avoir un moyen intelligent de le faire, sans impliquer le cloud computing.
Une partie de votre problème réside dans la création de .ssh
. Ce que je ferais utilise ssh-keygen
, qui le créera s'il n'existe pas et définit les autorisations correctement (et, bien sûr, crée une paire de clés pour l'utilisateur).
$ 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
'
Remarques:
adduser
au lieu de useradd
- il crée un répertoire personnel squelette à partir de /etc/skel
.--gecos ""
et --disabled-password
sont utilisés pour éviter les invites. Si cela ne vous dérange pas de demander un nom et un mot de passe, vous ignorez ces options.ssh-keygen
peut créer .ssh
avec les autorisations appropriées-N ""
et -f ~ceph/.ssh/id_rsa
sont utilisés pour éviter les invites. Vous pouvez les ignorer si les invites relatives à l'emplacement de la clé (pour lequel la valeur par défaut est correcte) vous intéressent et si vous souhaitez définir une phrase secrète..ssh
ni .ssh/authorized_keys
nécessité d'avoir 700
comme mode. Tant que seul le propriétaire peut leur écrire, c'est bon (755
pour .ssh
et 644
pour .ssh/authorized_keys
va très bien).J'ai trouvé une solution plus générique en modifiant la réponse en cette question pour ce faire tout en vous connectant en tant qu'utilisateur différent:
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"'
Vous pouvez utiliser ssh-copy-id
pour transférer votre clé SSH vers un hôte distant.
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.
Il crée automatiquement des répertoires (tels que .ssh
] et les attribue aux autorisations appropriées.