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 ssh
einen Port auf dem localhost verwendet habe.
Der plutil
Befehl besagt, dass meine Konfiguration in Ordnung ist. launchctl load path-to-plist
läuft ohne fehler.
Beim Ausführen wird launchctl list
der 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.
ProgramArguments
sollte in 4 aufgeteilt werden<string>…</string>
, eine für jedenargv[i]
, als<string>-F</string>…
.Antworten:
OK, Ihre zweite Frage zuerst ansprechen ( ist meine Liste wirklich korrekt? ),
plutil
(In ihrem Standardaufruf) "lints" (prüft)plist
Dateien auf Richtigkeit:Gleichwertig:
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 hinzuplist
:Versuchen Sie es erneut
plist
und überprüfen Sie dann Ihre Protokolle:Einige zusätzliche Beobachtungen:
Mein Verständnis von Ihnen
inetdCompatibility
ist, dass der Agent gestartet werden sollte, wenn er geladen ist. Sie sagen jedoch, dasslaunchctl list
der Agent nicht angezeigt wird. Ändert sich das, wenn Sie eslaunchctl start com.my.ssh_tunnel
nach dem Laden der versuchenplist
? Zeigen die Protokolle etwas Neues?Ich verstehe die Beziehung zwischen
Program
und nicht ganzProgramArguments
- könnte nur ich sein, aber ich findeman launchd.plist
die Erklärung für dieProgramArguments
Schwierigkeit. Ich würde geneigt sein , das Hinzufügen zu versuchen ,/usr/bin/ssh
als erstestring
inProgramArguments
und für den Eintrag zu entfernenProgram
. (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
ProgramArguments
dies wie folgt angeben (ich habeusr/bin/ssh
wie oben erwähnt hinzugefügt ):Mein Grund dafür ist, dass die wenigen
plist
s, die ich auf meinem System finden kann und die (mehrere)ProgramArguments
diese Redewendung verwenden:Beachten Sie, wie
bash
's-c
Option und die entsprechendencommand_string
sind in separaten Argumenten.quelle