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