2013年12月7日土曜日

ssh し続ける(要管理者権限)

あるサーバに ssh のコネクションを貼り続ける必要があったので、ちょっと設定してみました。

前提

ssh の設定(鍵交換によるパスワードなしのログインなど)は済んでいるものと仮定します。やり方が分からない人は、ググって調べてください。

設定

青で書いているところは、パラメータなので、適宜変更して使用してください。

/Library/LaunchDaemons/com.example.keeping-ssh.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.example.keeping-ssh</string>
        <key>ProgramArguments</key>
        <array>
                <string>/usr/bin/ssh</string>
                <string>example.com</string>
                <string>ping</string>
                <string>-i</string>
                <string>60</string>
                <string>127.0.0.1</string>
        </array>
        <key>KeepAlive</key>
        <true/>
        <key>UserName</key>
        <string>user</string>
        <key>GroupName</key>
        <string>group</string>
</dict>
</plist>

ファイル名は何でもいいですが、普通は plist の中の Label と同じ名前にします。自分のドメインを持っていない人は、com.example のままで特に問題はないです。肝心の設定項目としては、次の 3ヶ所です。

  • host は ssh でログインしたいホスト名です
  • usergroup は(ローカルの Mac 側で)ssh のプロセスを動かすユーザ名とグループ名です。普段 Mac にログインする時に使っているもので OK です。

ファイルを作ったら、このファイルのオーナーを root:wheel に設定し、launchd に読み込ませます(または Mac を再起動してください)。

$ sudo chown root:wheel /Library/LaunchDaemons/com.example.keeping-ssh.plist
$ sudo launchctl load /Library/LaunchDaemons/com.example.keeping-ssh.plist

ssh でログインした先で、自分に向けて定期的に ping を打って、コネクションを維持しています(ここら辺は、各自用途に応じて適当なコマンドを動かしましょう)。それでも切断されてしまった場合は、KeepAlive を指定しているので、launchd が自動的に再接続を試みます。ログアウトしていても、ssh のコネクションは維持され続けます。

launchd は色々やってくれるので、スクリプトを書かなくても設定だけで済んでしまいます。楽ちんです。

0 件のコメント:

コメントを投稿