root et clef ssh

cricri13009

Membre confirmé
14 Mars 2022
11
2
71
Bonjour,
J'essaie d'automatiser un backup d'un Mac vers un autre Mac. Dans un des scripts shell, je fais un ssh vers le Mac serveur. En bon débutant qui respecte les bonnes règles, j'utilise les clefs privés et publiques des utilisateurs, donc sans nécessité de saisir un mot de passe.
Tout marche bien, que les scripts soient lancés depuis le terminal, ou depuis un agent Launchd.

J'ai aussi un script qui doit s'exécuter au démarrage du Mac serveur (il envoie son adresse IP au Mac sauvegardé). Le script s'exécute sans problème à partir du terminal ou de LaunchAgents (donc connecté sous un nom d'utilisateur). Par contre, depuis LaunchDaemons (donc sous l'utilisateur root) la commande ssh se fige car le Mac serveur attend une clef alors que root n'en a pas (en tous cas, je n'ai pas trouvé comment lui en donner une). Lorsque je fais un ssh -vv, les dernières infos reçues sont :
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug2: userauth_kbdint
debug2: we sent a keyboard-interactive packet, wait for reply
debug2: input_userauth_info_req: entering
debug2: input_userauth_info_req: num_prompts 1

J'ai bien essayé avec sshpass -e SSHPASS, mais ça ne change rien, la commande ssh se fige au même endroit alors que SSHPASS contient le bon password de l'utilisateur distant.
Même souci si je mets SessionCreate à yes et UserName à userid dans la plist de LaunchDaemons.

Avez-vous déjà rencontré cette situation ? Comment vous en êtes-vous sortis ?
Christian
PS : en rajoutant les options ci-dessous à ssh, ça ne marche pas mieux.
-o StrictHostKeyChecking=no \
-o HostbasedAuthentication=no \
-o PubkeyAuthentication=no \
-o PreferredAuthentications=password
 
Dernière édition:
Bon, j'ai un peu avancé depuis mon premier post (jai fait un ssh -vvv au lieu de ssh -vv !).
Le LaunchDaemons ne marche pas car la passphrase de ma clef est stockée dans la login.keychain qui n'est pas déverrouillée dans un script lancé en tant que démon (au contraire d'un script lancé par un agent). Je pourrai faire un unlock-keychain de celle-ci mais il faudrait que j'écrive en dur la passphrase dans le script. Ou que je déplace la passphrase dans la system.keychain mais celle-ci est ouverte à tous.
Je ne vois pas de moyen d'utiliser une clef pour initier une session ssh lancée par un démon.
 
Bonjour,
J'essaie d'automatiser un backup d'un Mac vers un autre Mac. Dans un des scripts shell, je fais un ssh vers le Mac serveur. En bon débutant qui respecte les bonnes règles, j'utilise les clefs privés et publiques des utilisateurs, donc sans nécessité de saisir un mot de passe.
Tout marche bien, que les scripts soient lancés depuis le terminal, ou depuis un agent Launchd.

J'ai aussi un script qui doit s'exécuter au démarrage du Mac serveur (il envoie son adresse IP au Mac sauvegardé). Le script s'exécute sans problème à partir du terminal ou de LaunchAgents (donc connecté sous un nom d'utilisateur). Par contre, depuis LaunchDaemons (donc sous l'utilisateur root) la commande ssh se fige car le Mac serveur attend une clef alors que root n'en a pas (en tous cas, je n'ai pas trouvé comment lui en donner une).

- en utilisant la commande prévue pour : ssh-keygen

- se mettre dans le compte root

- lancer la commande en choisissant l'algorithme voulu (-t) :

Bloc de code:
ssh-keygen  -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/var/root/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/root/.ssh/id_ed25519
Your public key has been saved in /var/root/.ssh/id_ed25519.pub
The key fingerprint is:
SHA256:H2klGURxxxxxxxxjJdaD5PSkxxxx/qe/aTrxxxxN7jrI [email protected]
The key's randomart image is:
...

- les clefs publiques et privées se retrouvent dans:

Bloc de code:
mini-1:~ root# ls -al  /var/root/.ssh/
total 32
drwx------  6 root  wheel  192 Jul 12 15:34 .
drwxr-x---  7 root  wheel  224 May 20 14:52 ..
-rw-------  1 root  wheel  411 Jul 12 15:34 id_ed25519
-rw-r--r--  1 root  wheel   99 Jul 12 15:34 id_ed25519.pub
-rw-------  1 root  wheel  364 Apr 30 15:54 known_hosts
-rw-r--r--  1 root  wheel  190 Apr 30 15:54 known_hosts.old
 
- en utilisant la commande prévue pour : ssh-keygen

- se mettre dans le compte root
Merci de ta réponse. Pour ssh-keygen, pas de soucis, j'ai pu les créer chez les utilisateurs (les membres de ma famille ayant un login).
Par contre, je ne sais pas me mettre dans le compte root. Je pensais que c'était impossible depuis belle lurette sous macOS.
 
Merci de ta réponse. Pour ssh-keygen, pas de soucis, j'ai pu les créer chez les utilisateurs (les membres de ma famille ayant un login).
Par contre, je ne sais pas me mettre dans le compte root. Je pensais que c'était impossible depuis belle lurette sous macOS.

Bloc de code:
serge@mini-1 ~ % id
uid=502(serge) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),33(_appstore),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),101(com.apple.access_ssh-disabled),400(com.apple.access_remote_ae),702(com.apple.sharepoint.group.2),701(com.apple.sharepoint.group.1)

Bloc de code:
serge@mini-1 ~ % sudo su - root
Password:

Bloc de code:
mini-1:~ root# id
uid=0(root) gid=0(wheel) groups=0(wheel),1(daemon),2(kmem),3(sys),4(tty),5(operator),8(procview),9(procmod),12(everyone),20(staff),29(certusers),61(localaccounts),80(admin),33(_appstore),98(_lpadmin),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),101(com.apple.access_ssh-disabled),400(com.apple.access_remote_ae),702(com.apple.sharepoint.group.2),701(com.apple.sharepoint.group.1)
mini-1:~ root#
 
Bloc de code:
serge@mini-1 ~ % id
uid=502(serge) gid=20(staff) groups=20(staff),12(everyone),61(localaccounts),79(_appserverusr),80(admin),81(_appserveradm),98(_lpadmin),33(_appstore),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),101(com.apple.access_ssh-disabled),400(com.apple.access_remote_ae),702(com.apple.sharepoint.group.2),701(com.apple.sharepoint.group.1)

Bloc de code:
serge@mini-1 ~ % sudo su - root
Password:

Bloc de code:
mini-1:~ root# id
uid=0(root) gid=0(wheel) groups=0(wheel),1(daemon),2(kmem),3(sys),4(tty),5(operator),8(procview),9(procmod),12(everyone),20(staff),29(certusers),61(localaccounts),80(admin),33(_appstore),98(_lpadmin),100(_lpoperator),204(_developer),250(_analyticsusers),395(com.apple.access_ftp),398(com.apple.access_screensharing),101(com.apple.access_ssh-disabled),400(com.apple.access_remote_ae),702(com.apple.sharepoint.group.2),701(com.apple.sharepoint.group.1)
mini-1:~ root#
Ca marche nickel ! J'ai pu me mettre sous root et créer ma clef. A partir du Terminal, mon ssh depuis root se fait sans saisir le mot de passe du user distant ni la passphrase de la clef (et sans avoir fait un ssh-add --apple-use-keychain
Par contre, à partir d'un script, le ssh attend un mot de passe mais je ne sais pas lequel.

En tous cas, merci bien pour le sudo su - root.

Christian
 
Dernière édition:
  • J’aime
Réactions: sergiodadi et boninmi