SSHを利用してノンパスワードログインする

別のサーバー同士でコマンドをやり取りするには
ssh username@servername commandname として実行できるが、このときにパスワードが要求されてしまう。
また、別のサーバーからファイルをセキュアに転送するには、
scp username@servername:(リモートサーバーのパス) (ローカルのパス) として実行できるが、このときにやはりパスワードが要求されてしまう。
これは自動化する上でかなり問題があり、expectという方法でパスワードを自動入力させる方法もあるが、これはクレバーではない。
sshにはノンパスワードログインという方法があり、接続元で発行した公開鍵を接続先のアカウントの.ssh/authorized_keys に保存することで実現できる。
設定方法でわかりやすかったサイトは、ぴえ~るの活動日記だけれども、デフォルトではauthorized_keys2ではなくauthorized_keysなので注意が必要。
また、多くのサーバーではこれだけでは接続できないので、接続先サーバーの/etc/ssh/sshd_configを編集(RSA公開鍵認証の有効化)しなければならない。わかりやすいサイトは、Gentoo Linuxで自宅サーバ であり、

#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeyFile .ssh/authorized_keys

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeyFile .ssh/authorized_keys

とすればよい。
僕の場合には、これをやってもうまくいかず、vオプションをつけてデバッグしてみたら
Offering public key: /home/hogehoge/.ssh/id_rsa
から先の認証手続きがうまくいっていないことがわかった。
いろいろ調べてみたら、おさかな学習帳にあるとおり接続先の/var/log/secureにエラーが出ていて、.ssh フォルダのパーミッションが正しくなかったために接続できなかったというオチだった。

sshで指定されたグループのみを許可する

AllowGroupsパラメータでグループ名を指定すると指定されていないグループに所属するログインユーザーを拒否することが出来る。パラメータはDenyUsers, AllowUsers, DenyGroups, AllowGroupsの順に処理されるらしい。

sshへの断続的なログインを防止する方法

rootユーザーで何度もsshでログインを試みようとしているものがログに残されているケースはかなり多い。総当り攻撃されれば、いつかはログインできてしまう可能性があるので、これを防ぐ方法がITMediaに掲載されていたので、紹介する。

# vi /etc/ssh/sshd_config
MaxStartups 2:80:5 #2つまでの接続要求を受け付け、3つを超えるそれ以降の要求を80%の割合で拒否し、さらに要求が増え続けて5つを超えると以降すべてを拒否する.