Gentooへsshする

前置き

外出先からsshするための設定メモです。ついでに、パスワード認証をやめて公開鍵認証に変えました。

本文

概要

  • ファイアウォール(iptables)で、22番ポートを開ける
  • CTU(フレッツの場合)で、22番ポートを開ける
  • CTU(フレッツの場合)で、22番ポートへのパケットをサーバへ流す
  • パスワード認証から公開鍵認証へ

iptables

$IPTABLES -A INPUT -p tcp -m state --state NEW --dport 22 -j SSH_INPUT
$IPTABLES -A SSH_INPUT -m recent --set --name SSH_ATTEMPT
$IPTABLES -A SSH_INPUT -m recent --update --seconds 30 --hitcount 3 --rttl --name SSH_ATTEMPT -j DROP
$IPTABLES -A SSH_INPUT -j ACCEPT

頻繁に接続を試みるヤツはDROPです。

CTU

やることは80番(http)と同じで、設定箇所は2箇所です。

  • ファイアウォール設定
  • 静的アドレス変換設定(ポート指定)

設定を反映させると、CTUリセットを要求されます。よって、IPアドレスが変わります。よってDDNSのアドレス更新が必要ですね。

公開鍵認証

鍵ペア生成

私の場合、接続元はWindowsなので、鍵ペア生成には、puttygen.exeを使いました。

  • SSH-2 RSAを選択
  • 鍵長は2048bit
  • Generateボタンを押す
  • マウスの動きを利用して乱数生成するみたいなので、マウスを動かす
  • バーが満タンになったら鍵ペア生成完了
  • パスフレーズを入力
  • ここでGenerateボタンを押すと堂々巡りなので押さないこと
  • Save private keyボタンを押して、秘密鍵をPuTTY形式で保存
  • メニューの[Conversions]→[Export OpenSSH Key]で、秘密鍵をOpenSSH形式で保存
  • ウィンドウの上部エディットボックスにある、"ssh-rsa"で始まる文字列をコピーして、テキストファイルに1行で保存(これが、公開鍵のOpenSSH形式)

鍵ファイル名は任意ですが、例えば、こんな感じです。

PuTTY形式OpenSSH形式
秘密鍵rsa.ppkid_rsa.pri
公開鍵なし(不要)id_rsa.pub

サーバに公開鍵を登録

あらかじめ、公開鍵ファイル(OpenSSH形式)を ~/.ssh へコピーしておきます(その方法は割愛)。

$ ls -ald ~/.ssh
drwx------ 2 foo foo 4096 2012-03-05 12:04 /home/foo/.ssh
$ cd ~/.ssh
$ cat ip_rsa.pub >>authorized_keys
$ chmod 600 authorized_keys
$ rm ip_rsa.pub

authorized_keysには複数の公開鍵を登録できます。

TeraTerm

  • メニューの[設定]→[SSH認証]
  • ユーザ名を入力
  • 「RSA/DSA鍵を使う」を選択
  • 秘密鍵欄に、OpenSSH形式の秘密鍵id_rsa.priのフルパスを入力
  • OKボタン
  • メニューの[設定]→[設定の保存]でINIファイル(ssh.iniとか)に保存
  • 起動オプションに /F=ssh.ini を指定して、TeraTermを起動
  • パスフレーズを入力

WinSCP

  • SSHのPreferred SSH protocol versionの"2 only"を選択
  • セッション情報を編集して、Private key fileにPuTTY形式の秘密鍵rsa.ppkのフルパスを入力
  • Loginボタンを押す
  • パスフレーズを入力

sshdの設定

  • /etc/ssh/sshd_configを編集
PasswordAuthentication no
UsePAM no
  • sshdを再起動
# /etc/init.d/sshd restart

クライアント側がLinuxの場合

Linux側でsshを使う場合は、秘密鍵ファイルを ~/.ssh/id_rsa という名前で保存しておきます。パーミッションは600です。

トラブルシューティング

うまくいかない場合は、デバッグオプション付きでsshdを起動するとヒントが得られるかもしれません。

# /usr/sbin/sshd -d

またLinux側からsshするときは、-v(あるいは、-vv、-vvv)オプションを付けると良いでしょう。

$ ssh 192.168.0.222 -v

自分の失敗談ですが、sshdがauthorized_keysを読むところでpermission deniedになることがありました。見てみると、所有者がrootになってました。

Last modified:2012/03/05 12:31:18
Keyword(s):
References:[サーバ管理・Linux関連]
This page is frozen.