Laden von User LaunchAgent erfolgreich

3

Ich habe eine plist-Datei erstellt, um einen xinetd- Prozess zu ersetzen , den ich unter Windows (Cygwin) und Linux erfolgreich zum Streamen einer imapd- Verbindung von einem Remoteserver über ssheinen Port auf dem localhost verwendet habe.

Der plutilBefehl besagt, dass meine Konfiguration in Ordnung ist. launchctl load path-to-plistläuft ohne fehler.

Beim Ausführen wird launchctl listder Agent nicht angezeigt. Wenn ich versuche, eine Verbindung zum Port des lokalen Hosts herzustellen, wird die Verbindung abgelehnt.

Hier ist meine Plist-Datei:

<?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>

Ich habe eine Zeile zu / etc / services für dname-imapd und einen nicht zugewiesenen Port (49022) hinzugefügt. Letztendlich werde ich dies in Verbindung mit ssh-agent (um diese Funktion "kennwortfrei" zu machen) und Thunderbird verwenden, um E-Mails von einem stark gesperrten System abzurufen.

Hier gibt es im Wesentlichen zwei Fragen. Erstens, woher weiß ich, dass mein Agent geladen wird (und wie bestätige ich das)? Zweitens, stimmt meine Pliste wirklich?

Hier ist meine ursprüngliche xinetd- Konfiguration:

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
}

Danke für jede Hilfe. Das macht mich ein bisschen verrückt.

Dies ist auf einem El Capitan Macbook Pro.

Ich habe auch einen geraden SSH-Tunnel ausprobiert, aber das funktioniert nicht wirklich (bevor es jemand vorschlägt). Es sei denn, jemand weiß, wie man es so macht, dass es wie inetd funktioniert und jedes Mal erscheint, wenn der Mail-Client eine Verbindung zum Port herstellt.

mrmacross
quelle
1
Ich denke, Ihr Array ProgramArgumentssollte in 4 aufgeteilt werden <string>…</string>, eine für jeden argv[i], als <string>-F</string>….
Dan
Die vorhandenen, funktionierenden Plisten scheinen kein Problem mit mehr als einer Zeichenfolge in einem Zeichenfolgen-Tag zu haben.
MrMacross

Antworten:

1

OK, Ihre zweite Frage zuerst ansprechen ( ist meine Liste wirklich korrekt? ), plutil(In ihrem Standardaufruf) "lints" (prüft) plistDateien auf Richtigkeit:

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

Gleichwertig:

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

Wenn Sie sich Ihrer ersten Frage zuwenden ( woher weiß ich, dass mein Agent geladen wird (und wie bestätige ich das)? ), Können Sie dies anhand einiger Punkte überprüfen.

Zunächst würde ich empfehlen, die Protokollierung hinzuzufügen, um das Debuggen zu erleichtern. Ich melde mich an ~/Library/Logs, füge also Folgendes zu meinem hinzu 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>

Versuchen Sie es erneut plistund überprüfen Sie dann Ihre Protokolle:

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

Einige zusätzliche Beobachtungen:

Mein Verständnis von Ihnen inetdCompatibilityist, dass der Agent gestartet werden sollte, wenn er geladen ist. Sie sagen jedoch, dass launchctl listder Agent nicht angezeigt wird. Ändert sich das, wenn Sie es launchctl start com.my.ssh_tunnelnach dem Laden der versuchen plist? Zeigen die Protokolle etwas Neues?

Ich verstehe die Beziehung zwischen Programund nicht ganz ProgramArguments- könnte nur ich sein, aber ich finde man launchd.plistdie Erklärung für die ProgramArgumentsSchwierigkeit. Ich würde geneigt sein , das Hinzufügen zu versuchen , /usr/bin/sshals erste stringin ProgramArgumentsund für den Eintrag zu entfernen Program. (Laden Sie die Protokolle neu und überprüfen Sie sie. Starten Sie sie neu und überprüfen Sie sie, falls erforderlich.)

Schließlich bin ich mir ziemlich sicher, dass @ daniel-Azuelos korrekt ist, und Sie müssen ProgramArgumentsdies wie folgt angeben (ich habe usr/bin/sshwie oben erwähnt hinzugefügt ):

<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>

Mein Grund dafür ist, dass die wenigen plists, die ich auf meinem System finden kann und die (mehrere) ProgramArgumentsdiese Redewendung verwenden:

<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>

Beachten Sie, wie bash's -cOption und die entsprechenden command_stringsind in separaten Argumenten.

John N
quelle