~/.ssh/config ファイルを書くことでサーバー毎に接続設定を変えることが出来る.と言う話を前に書きました。 .ssh/config はイロイロ便利なので,もう一度まとめて見ました。
ホスト毎にユーザー名を変える
ホスト名を省略する
Host s0 Hostname 192.168.2.5
この記述で
ssh s0
が
ssh 192.168.2.5
と同等になります.IP省略できるし /etc/hostsの書換えも要らない。楽ちんです!!
サーバー毎に鍵を変える
Host 192.168.2.5 IdentifyFile /home/share/keys/id_rsa.fs
と書けば接続先で鍵を変えることが出来るようになります.
ssh host01 -i /path/to/key/id_rsa
が
ssh host01
に省略されます
ポート番号
サーバー毎のポート番号を指定できます
Host 192.168.2.5 Port 10020
これで、接続時にポート番号指定を省略できます。まいかいポート指定しなくて良いですものね。
先ほどのホスト名指定と組み合わせて
Host my_host01 Hostname takuya.example.com Port 10220
とすれば、まとめて設定できて便利
SSH接続がブチブチ切れるのを防止する
接続先のルーターがTCPをすぐに切断する系の場合。全体の設定でKeepAliveするのもばからしいので。
Host 192.168.2.5 ServerAliveInterval 15
と書けば,15秒に一回,SSHクライアント側TCPキープアライブを送ります。
TCPKeepalive はデフォルトがYesなので keepalive はデフォルト有効です.
どうしても切断されてしまうなら,次のサイトが参考になるかも。
ログイン先で定期的に何かを出力するプログラムを実行する
端末を取得する場合のみ有効な方法ですが、 一定時間おきに何かの文字列を出力するようなプロセスを バックグラウンド実行しておけば その文字列がコネクション上を流れますので、 接続を維持できます。
また、ポートフォワーディングが主目的の場合など、 ping -i 300などとリモートで実行する例がよく見られます。
問題点は、他のプロセスの出力と混ざってしまうことです。 リモートログインしてEmacsなどの端末制御を行うアプリケーションを実行すると、 このバックグラウンドプロセスの出力が画面を乱してしまいます。 ビープ(0x0a)を出力すれば画面が乱れることはありませんが、 うるさいのでイマイチだと思います。
http://www.geocities.co.jp/AnimeComic/1098/documents/unixmemo/ssh-keepalive.htmlKeepAliveが期待通り動くようにOSのTCP設定を変更する
前述したように、ただssh_configでKeepAlive yesとしただけではこの問題は解決しません。 KeepAliveオプションはTCPソケットを作るときにSO_KEEPALIVEを有効にするものですが、 これは一定時間何もパケットの流れないコネクションに対し、 接続が生きているかどうかを確認するためのパケットを流すものです。 このkeepaliveメッセージを送るまでの時間は、手元のLinuxだと2時間の設定ですので、 とっくに切れているくらいの時間が経過してようやく接続断をOSが認識するわけです。 筆者にはこのあたりのレイヤーの話は全くわからないのですが、 多分そういうものなのでしょう。
Linuxの場合は /proc/sys/net/ipv4/tcp_keepalive_time などをいじってこの設定を5分などと変更すれば 問題は解決するようですが、心理的に抵抗があります。
「Programming UNIX Sockets in C - Frequently Asked Questions」の記述からしても、アプリケーションレベルで対処すべき問題のように思います。
それでも切れるならHeartbeatパッチを適用したSSHコマンド使用を考えると良いかも・
参考資料
man ssh_config
http://d.hatena.ne.jp/takuya_1st/20110628/1309230095