SSH

(2010.5.17-2014.5.21)

sshで安全にリモート接続.
(環境) CentOS 5.2-5.7, 6.2, TeraTerm4.64, WinSCP 4.27

インストール

(以下プロンプトが#ならroot,$なら普通のユーザー)

CentOS 5.2では標準でSSHサービスが動いている.必要なら,yumでインストールして起動,サービス開始しておく.
# yum install sshd
# /etc/init.d/sshd start
# /sbin/chkconfig sshd on
Windowsには,Tera TermWinSCPを,すべてのオプションをデフォルトのままでインストール.ところで,
Tera Termとは,Windowsパソコンからlinuxサーバにsshでログインするソフト,
WinSCPとは,Windowsパソコンからlinuxサーバにsshでファイル転送するソフト.(
以下,linuxサーバをa.com,もう一台のlinuxサーバをb.comとする.

(注)WinSCPの文字化けについて.WinSCPデフォルト設定でCentOS5に接続すると,日本語ファイル名が文字化けする.セッションの設定画面の環境で,[ファイル名をUTF-8でエンコード]を[自動]ではなく[オン]にするとこの問題は解決する.[自動]のバグと思われる.

パスワードログイン

TeraTermから:

WindowsでTera Termを起動する.[新しい接続]ダイアログボックスで,[ホスト]a.com,[サービス]を[SSH]にして[OK].[SSH認証]で[プレインテキストを使う]を選択し,[ユーザ名]と[パスワード]を入れて[OK].

WinSCP:

WinSCPを起動して,[WinSCP ログイン]ダイアログボックスで,[新規]ボタンを押す.[ホスト名],[ユーザ名]と[パスワード]を設定する.[保存]ボタン押してセッション名をつけて保存してログインする.次回からは,WinSCPを起動して,セッション名を選ぶだけでログインできる.

Linuxサーバ間:

他のサーバーb.comにパスワードログインするには,
# ssh root@b.com
@の前がユーザ名,後がログイン先のサーバー名.

RSA鍵を使ってログイン

TeraTerm:

    (端末の鍵を生成)

  1. Tera Termを起動.[新しい接続]ダイアログボックスは[キャンセル]する.
  2. [設定]-[SSHキー生成]で,[キーの種類]を[RSA]にし,[生成]ボタンを押す.[キーのパスフレーズ]は空欄のままにして,[公開鍵の保存],[秘密鍵の保存]を押してそれぞれの鍵をデフォルトの名前で保存する.これらの鍵は
    C:\Program Files\teraterm\
    に次のようなファイル名で保存される。鍵はホスト名を変えても使える。
    鍵の種類 ファイル名  
    公開鍵 id_rsa.pub 鍵のテキストの末尾の ユーザ名@ホスト名 はコメントで,書き換えてもOK。
    秘密鍵 id_rsa  
    (秘密鍵を設定)

  3. [設定]-[SSH認証]で,a.comのユーザを[ユーザ]に入れ,[RSA/DSA鍵を使う]を選択し,[秘密鍵]に先に作成したid_rsaを指定し,[OK]を押す.[設定]-[設定の保存]でこの設定を保存しておく.Tera Termを終了する.

    (公開鍵をサーバにインストール)

  4. 公開鍵id_rsa.pubは,中身が1行のテキストファイルである.これを,ログインしたいユーザのホームディレクトリの下の.sshフォルダのauthorized_keysファイルに追加する..sshフォルダや,authorized_keysファイルが無い場合は新たに作り,パーミッションを次のようにしておく.
    drwx------ 2 root root 4096 1月 25 11:10 .ssh
    -rw------- 1 root root 644 1月 25 11:10 authorized_keys
    authorized_keysファイルでは,#で始まる行や空行はコメントになるので,どのマシンの公開鍵かをコメントで書いておくとよい.

    (サーバーの設定)

  5. /etc/ssh/sshd.configファイルをバックアップしてから
    # cd /etc/ssh/
    # cp sshd_config sshd_config.org
    sshd_configファイルを次のように修正して,サーバのsshの設定をおこなう.
    # vi sshd.config
    
    AuthorizedKeysFile .ssh/authorized_keys
    PasswordAuthentication no ←プレインパスワードログインを禁止する場合のみ.
    修正後sshを再起動する.
    # /etc/init.d/sshd restart
    これで,Tera Termを起動し,[新しい接続]ダイアログボックスも[SSH認証]ダイアログボックスも何も入力せずに[OK]を押すだけで,上で設定したユーザでa.comにログインできる.なお,[セキュリティ警告]は,[このホストをknown hostsリストに追加する]をチェックして[続行]をクリックする.プレインパスワードログインを禁止しておけば,便利な上に安全.

WinSCP:

    (鍵の変換)

  1. [スタート]メニューから[WinSCP]-[鍵関連ツール]-[PuTTYgen]を起動する.
  2. [Load]ボタンを押して,[ファイルの場所]をC:\Program Files\teraterm\,[ファイルの種類]を[All Files]にして,Tera Termで作成したid_rsaを[開く].
  3. うまく開けたら,[Save private key]ボタンを押して,パスフレーズは入れずに,[ファイル名]にid_rsa.ppkと入力して[保存]する.[x]ボタンでツールを終了する.

    (セッションの作成)

  4. WinSCPを起動して,[WinSCP ログイン]ダイアログボックスで,[新規]ボタンを押す.
  5. [ホスト名],[ユーザ名]と[秘密鍵]を設定する.秘密鍵は上で変換したC:\Program Files\teraterm\id_rsa.ppk.[保存]ボタン押してセッション名をつけて保存してログインする.

    次回からは,WinSCPを起動して,セッション名を選ぶだけでログインできる.

Linuxサーバ間:

    (a.comの鍵を生成)

  1. ホームディレクトリで,a.comの公開鍵と秘密鍵をつくる.
    # cd
    # ssh-keygen
    鍵はホームディレクトリ下のディレクトリ.sshの中に,Tera Termで作ったときと同じ名前で,それぞれid_rsa.pub,id_rsaという名前で作られる.なお,パスワードなどの入力を求められたらすべて何も入れずに[Enter]キーを押す.
  2. 後は,Tera Termからa.comにログインできるように設定したのと同じように,ログインしたい他のサーバーb.comにa.comの公開鍵をインストールして,b.comのsshを設定すればOKである.Linuxサーバー間では,公開鍵をコピーするコマンドssh-copy-idが用意されているので,まず,
    # ssh-copy-id -i .ssh/id_rsa.pub root@b.com
    で公開鍵をb.comにインストールする.
  3. 次に,b.comにログインして,sshd.configファイルをバックアップしてから
    # cd /etc/ssh/
    # cp sshd_config sshd_config.org
    sshd_configファイルを次のように修正して,b.comのsshの設定をおこなう.
    # vi sshd_config
    
    RSAAuthentication yes
    AuthorizedKeysFile .ssh/authorized_keys
    PermitRootLogin without-password ←パスワードログインを禁止
    PasswordAuthentication no ←プレインパスワードログインを禁止する場合のみ.
  4. 修正後sshを再起動する.
    # /etc/init.d/sshd start
    以上で
    # ssh root@b.com
    でa.comからb.comにパスワード無しでログインできる.

SSHサーバーのRSA公開鍵

SSHは,ログイン認証に使うRSA公開鍵の他に,暗号化通信をするためのRSA公開鍵も使う。これは /etc/ssh/のssh_host_rsa_key.pub(対応する秘密鍵はssh_host_rsa_key)に入っている。SSHクライアントがサーバーに最初に接続する時,クライアントは「これはサーバーの正しい公開鍵ですか?」と公開鍵のフィンガープリント(ハッシュ値)を示して確認してくる。これがサーバーが公開している公開鍵のフィンガープリントと一致していれば,SSH通信を始めれば良い。

公開鍵からそのフィンガープリントを得るには,次のコマンドを使う。

ssh-keygen -l -f 公開鍵のファイル名

参考

  1. ITmedia エンタープライズ : Linux Tips「TeraTermでパスワードログインを制限しRSAログインのみを許可させる」(http://www.itmedia.co.jp/help/tips/linux/l0410.htmll) 2009.1現在