web-dev-qa-db-fra.com

Le moyen le plus simple de configurer un nouvel utilisateur avec un accès SSH sur un hôte distant, avec un accès root

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
1
0xF2

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.

1
0xF2

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:

  • utilisez 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
  • Encore une fois, -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.
  • Ni .ssh ni .ssh/authorized_keysné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).
1
muru

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"'
0
0xF2

Vous pouvez utiliser ssh-copy-id pour transférer votre clé SSH vers un hôte distant.

Exemple:

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.

0
Matthew Smith