3 votes

Chargement réussi de l'utilisateur LaunchAgent

J'ai créé un fichier plist pour remplacer une xinetd que j'ai utilisé avec succès sous Windows (Cygwin) et Linux pour diffuser en continu une imapd à partir d'un serveur distant via ssh sur un port de l'hôte local.

El plutil indique que ma configuration est correcte. launchctl load path-to-plist fonctionne sans erreur.

Quand je cours launchctl list l'agent ne s'affiche pas. Lorsque j'essaie de me connecter au port sur l'hôte local, j'obtiens un refus de connexion.

Voici mon fichier plist :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>Label</key>
            <string>com.my.ssh_tunnel</string>
        <key>Program</key>
            <string>/usr/bin/ssh</string>
        <key>ProgramArguments</key>
            <array>
                    <string>-F /Users/userx/.ssh/config</string>
                    <string>dname /usr/sbin/imapd</string>
            </array>
        <key>Sockets</key>
            <dict>
                <key>Listeners</key>
                <dict>
                    <key>SockServiceName</key>
                        <string>dname-imapd</string>
                    <key>SockType</key>
                        <string>stream</string>
                    <key>SockProtocol</key>
                        <string>TCP</string>
                </dict>
            </dict>
        <key>inetdCompatibility</key>
            <dict>
                <key>Disabled</key>
                <false/>
                <key>Wait</key>
                <false/>
            </dict>
        <key>EnvironmentVariables</key>
            <dict>
                <key>SSH_AUTH_SOCK</key>
                    <string>/Users/userx/.ssh-agent.sock</string>
            </dict>
    </dict>
</plist>

J'ai ajouté une ligne dans /etc/services pour dname-imapd et un port non attribué (49022). En fin de compte, je l'utiliserai en conjonction avec ssh-agent (pour que cela fonctionne "sans mot de passe") et Thunderbird pour récupérer le courrier d'un système très verrouillé.

Il y a essentiellement deux questions ici. Premièrement, comment puis-je savoir que mon agent est chargé (et comment puis-je le confirmer) ? Deuxièmement, est-ce que mon plist est correct ?

Voici mon original xinetd config :

service imapssh
{
        disable         = no
        type            = UNLISTED
        port            = 2208
        socket_type     = stream
        protocol        = tcp
        wait            = no
        server          = /usr/bin/ssh
        server_args     = dname /usr/sbin/imapd
        user            = userx
}

Merci pour toute aide. Cela me rend un peu fou.

Ceci sur un Macbook Pro El Capitan.

J'ai également essayé un tunnel ssh direct, mais cela ne fonctionne pas vraiment (avant que quelqu'un ne le suggère). À moins que quelqu'un ne sache comment le faire fonctionner comme inetd et se reproduisent à chaque fois que le client de messagerie se connecte au port.

1voto

John N Points 1418

OK, je réponds d'abord à votre deuxième question ( Est-ce que mon plist est correct ? ), plutil (dans son invocation par défaut) "lints" (chèques) plist pour vérifier l'exactitude des fichiers :

plutil ~/Library/LaunchAgents/local.brew.update.plist

Équivalent à :

plutil -lint ~/Library/LaunchAgents/local.brew.update.plist

Pour ce qui est de votre première question ( comment puis-je savoir que mon agent est chargé (et comment puis-je le confirmer) ? ), voici quelques éléments pour vous aider à le vérifier.

Tout d'abord, je recommande d'ajouter la journalisation pour faciliter le débogage. J'enregistre sur ~/Library/Logs donc ajouter quelque chose comme ça à mon plist :

<key>StandardOutPath</key>
<string>/Users/userx/Library/Logs/local.brew.update.stdout</string>
<key>StandardErrorPath</key>
<string>/Users/userx/Library/Logs/local.brew.update.stderr</string>

Essayez de recharger votre plist puis vérifiez vos journaux :

less ~/Library/Logs/local.brew.update.stdout
less ~/Library/Logs/local.brew.update.stderr

Quelques observations supplémentaires :

Ma compréhension de votre inetdCompatibility est que l'agent doit démarrer quand il est chargé. Cependant, vous dites que launchctl list ne montre pas l'agent. Cela change-t-il si vous essayez launchctl start com.my.ssh_tunnel après avoir chargé le plist ? Les journaux montrent-ils quelque chose de nouveau ?

Je ne comprends pas vraiment la relation entre Program y ProgramArguments - C'est peut-être juste moi, mais je trouve man launchd.plist L'explication de ProgramArguments difficile à vivre. Je serais enclin à essayer d'ajouter /usr/bin/ssh en tant que première string sur ProgramArguments et en supprimant l'entrée pour Program . (Rechargez ensuite et vérifiez les journaux. Redémarrez et vérifiez les journaux si nécessaire).

Enfin, je suis à peu près certain que @daniel-Azuelos a raison, et que vous devez préciser votre ProgramArguments comme ceci (j'ai ajouté usr/bin/ssh comme indiqué ci-dessus) :

<key>ProgramArguments</key>
<array>
    <string>/usr/bin/ssh</string>
    <string>-F</string>
    <string>/Users/userx/.ssh/config</string>
    <string>dname</string>
    <string>/usr/sbin/imapd</string>
</array>

Mon raisonnement pour cela est que les quelques plist que je peux trouver sur mon système qui utilisent (plus d'une) ProgramArguments utiliser cet idiome :

<key>Label</key>
<string>com.divx.uninstall.preferences</string>
<key>ProgramArguments</key>
<array>
    <string>/bin/bash</string>
    <string>-c</string>
    <string>if [[ ! -e "/Applications/DivX/DivX Preferences.app" ]] ; then open "/Library/Application Support/DivX/Uninstall DivX for Mac.app"; fi</string>
</array>

Notez comment bash 's -c et l'option correspondante command_string sont dans des arguments séparés.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X