sshで接続してるときに短時間でタイムアウトにならないようにする

sshでサーバに接続してるときに非常にイライラさせられるので、調べた。

参考:ssh 接続をタイムアウトしないようにする

設定は、クライアント側・サーバ側のどちらかのみすればよいとのこと。
とりえあずサーバ側を設定してみる。

vim /etc/ssh/sshd_config

sshd_configに、下記を追加してみた。

どうもできてるっぽい。と思ったらできていない!

参考:NATな環境で放置したSSH接続が切断される問題について

よくわからないが、とりあえず解決したいので次に、クライアント側の設定もしてみる。
できてる。

SSH (Secure SHell) の仕組み

SSHとは、ネットワークを介して他のコンピュータに安全にアクセスする仕組み。
telnetは暗号化されてないので盗聴の危険性があるが、sshは暗号化されているので安全。

SSHはRSA暗号方式かDSA暗号方式のどちらかで暗号化した公開鍵と秘密鍵のペアを用いる。公開鍵は暗号化のみ可能であり、秘密鍵は復号のみを行う。暗号化のみ可能で復号ができない為、公開鍵は公開されても問題がない。公開鍵は公にして問題ないことから、複数のリモートコンピュータと接続する場合も、公開鍵・秘密鍵のペアは一つあればよい。

SSHを使って、リモートコンピュータにアクセスしようとする場合、アクセス元のコンピュータで公開鍵・秘密鍵のペアを作成し、公開鍵をリモートコンピュータに渡しておく必要がある。

リモートコンピュータに、公開鍵を渡した後で、ssh接続をしようとすると、

  • sshが、RSA認証プロトコルを使用する旨をリモートコンピュータに伝える。
  • すると、リモートコンピュータが、乱数を生成し、その乱数を渡された公開鍵を基に暗号化し送信してくる。
  • 接続元コンピュータは、受信した暗号を秘密鍵で復号し、復号結果をリモートコンピュータに送信する。
  • リモートコンピュータは受信した内容が生成した乱数と一致すれば、秘密鍵保有者であることが確認されたためアクセスを許す。

秘密鍵が他人に渡った場合あらゆるアクセス権限が渡ってしまうことになる為、秘密鍵作成時にはパスフレーズを登録すべき。これによって、万一他人に秘密鍵が渡っても、パスフレーズがない限りはそれを使用できない。

ただ、SSHで公開鍵・秘密鍵を利用する目的の一つにパスワード入力を不要にするという点があるが、パスフレーズを登録した場合、パスワードの代わりにパスフレーズの入力が必要となる為、その目的に合致しない。そこで、パスフレーズ入力を回避したい場合は、ssh-agentを利用する。macには、キーチェーンという仕組でパスフレーズ入力が回避できる。

また、/etc/hosts.allow、/etc/hosts.denyを編集することで、接続元を制限することができる。hosts.denyはhosts.allowよりも先に見られる。hosts.denyに、ALL:ALLと書くことで、「全てダメ」になる。hosts.allowに下記にように書くことで、記載した対象のみ接続可となる。

参考:
http://e-words.jp/w/ssh.html
http://www.atmarkit.co.jp/flinux/special/ssh/ssh.html
http://www.turbolinux.com/support/document/knowledge/152.html
SSH-KEYGEN
OpenSSH キー (鍵) の管理