Comment OS X Cron peut-il utiliser ssh-agent existant sans environnement?


1

J'ai parcouru tous ces forums et soit je n'ai pas trouvé de réponse à cette question, soit plus souvent, la question est différente.

Le client est OS X El Capitan. Je suis connecté et ma clé ssh ( avec phrase secrète ) est correctement stocké dans le trousseau. Tout fonctionne bien manuellement: je peux ssh sur mon serveur, où j'ai précédemment enregistré ma clé publique, sans que le mot de passe composé ne soit demandé. OS X le charge dans ssh-agent lors de la connexion.

Mais bien sûr, mon script ssh sur mon serveur ne fonctionne pas dans le compte à rebours de mon compte, car l'environnement ne dispose pas de la variable SSH_AUTH_SOCK. On me demande la phrase secrète.

Je peux le faire fonctionner sans surveillance comme ceci:

my $sock = `ls /private/tmp/com.apple.launchd.*/Listeners`; chomp($sock);
system("SSH_AUTH_SOCK=$sock  /usr/bin/ssh myhost mycommand") && die "blah: $!";

Mais cela semble être un coup dur. Le trousseau est difficile d'accès, mais a le potentiel d'être vraiment gentil. Je ne peux pas imaginer qu'il n'y a AUCUN moyen propre d'y accéder.


Il y a généralement un problème avec les utilisateurs. Si tu cours cron sous différents utilisateurs, il ne devrait pas pouvoir fonctionner avec votre trousseau d’utilisateurs. Si vous exécutez le cron sous le même utilisateur, la solution ci-dessus est tout à fait valide. ssh-agent Le concept est basé sur la portée de la session et la connexion est donc stockée dans une variable d’environnement. Il n’ya pas d’autre moyen d’obtenir cette connexion que de se procurer la variable d’environnement ou le socket.
Jakuje

C'est suffisant. Même utilisateur dans ce cas. Je n'essaierais pas de le faire autrement. Il semblait juste que si Apple veut tout emballer si bien (et c’est bien), ils devraient faire un pas de plus et avoir un outil en ligne de commande pour obtenir le socket, au lieu d’avoir à le rechercher. En fait, je me souviens d'avoir lu toute l'entreprise comme un init paresseux via launchd. Il est donc possible que je puisse démarrer, me connecter et ne pas avoir besoin d'initialiser pour l'instant, donc pas de socket. Ce CLI manquant aurait pu faire l'init aussi. Tant pis. Je déteste juste l'idée de déplacer dans un répertoire / tmp pour chrissakes. Mais je suppose que cela continuera à fonctionner. THX.
joe

Peut-être y a-t-il une commande Apple (à ma connaissance, je n’utilise pas Apple, mais AskDifferent , ils pourraient savoir).
Jakuje

Bonne idée. J'ai d'abord posé la question ici (et j'ai été tenté d'utiliser ServerFault) parce que c'est un problème de terminal / réseau et rien à voir avec l'interface utilisateur, mais je vais essayer. Quel est le protocole ici? Puis-je ouvrir un Q avec un lien vers ce Q? Le dupliquer?
joe
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.