あるサーバに 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 でログインしたいホスト名です
- user と group は(ローカルの 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 件のコメント:
コメントを投稿