ユーザーLaunchAgentの正常なロード


3

plistファイルを作成して、Windows(Cygwin)およびLinuxで正常に使用してlocalhostのポート経由でリモートサーバーからimapd接続をストリーミングするxinetdプロセスを置き換えました。ssh

plutilコマンドは、私の設定がOKであると言います。launchctl load path-to-plistエラーなしで実行されます。

launchctl listエージェントを実行しても表示されません。ローカルホストのポートに接続しようとすると、接続が拒否されます。

これが私の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>

dname-imapdおよび未割り当てポート(49022)の行を/ etc / servicesに追加しました。最終的には、これをssh-agent(この機能を「パスワードなし」にする)およびThunderbirdと組み合わせて使用​​して、非常にロックダウンされたシステムからメールを取得します。

ここには本質的に2つの質問があります。1つは、エージェントがロードされていることをどのように確認するか(およびそれをどのように確認するか)。2、私のplistは実際に正しいですか?

オリジナルのxinetd設定は次のとおりです。

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
}

助けてくれてありがとう。これは私を少し夢中にさせています。

これはEl Capitan Macbook Proにあります。

また、私はまっすぐなsshトンネルを試しましたが、実際には機能しません(誰かが提案する前)。メールクライアントがポートに接続するたびにinetdおよびspawnのように動作させる方法を誰かが知らない限り。


1
私はあなたの配列が考えるProgramArguments4に分割されるべき<string>…</string>それぞれについて、1 argv[i]として、<string>-F</string>…
ダン

既存の機能するリストには、文字列タグ内の複数の文字列に問題はないようです。
mrmacross

回答:


1

OK、最初の2番目の質問に対処します(私のplistは実際に正しいですか?)、plutil(デフォルトの呼び出しで)plistファイルの正当性を「リント」(チェック)します:

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

に相当:

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

最初の質問(エージェントがロードされていることをどのように確認しますか(およびそれをどのように確認しますか?))に戻ります。

最初に、デバッグを支援するためにロギングを追加することをお勧めします。にログインする~/Library/Logsので、次のようなものをmyに追加します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>

再ロードしてplistからログを確認してください:

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

いくつかの追加の観察:

あなたの私の理解はinetdCompatibility、エージェントがロードされたときに開始する必要があるということです。しかし、あなたはそれlaunchctl listがエージェントを示さないと言います。launchctl start com.my.ssh_tunnelロード後に試してみると、それは変わりますplistか?ログには新しいことが表示されますか?

ProgramProgramArguments- の関係を完全に理解していません-ちょうど私である可能性がありますが、私man launchd.plistProgramArgumentsハードの説明を見つけます。/usr/bin/ssh最初stringに追加し、ProgramArgumentsのエントリを削除してみてくださいProgram。(その後、ログを再ロードして確認します。必要に応じて、ログを再起動して確認します)。

最後に、@ daniel-Azuelosが正しいことを確信しています。次のProgramArgumentsように指定する必要があります(usr/bin/ssh上記のように追加しました)。

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

この理由は、plistシステム上で見つけることができるいくつかのs(複数)ProgramArgumentsがこのイディオムを使用していることです:

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

bash-cオプションと対応するオプションcommand_stringが別々の引数にあることに注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.