結果だけでなく過程も見てください

日々の奮闘を綴る日記です。

SSH接続を公開鍵暗号方式で行う方法 〜SubversionをSSHで利用する(3)〜

以前、SSH接続でSubversionを使用する方法を紹介しましたが、
当時はパスワード認証を利用していました。

SubversionSSHで利用する(1)(svn+ssh)
http://d.hatena.ne.jp/taiyakisun/20101211#1292049559

SubversionSSHで利用する(2)(svn+ssh)
http://d.hatena.ne.jp/taiyakisun/20101212#1292173223

しかしリポジトリとやり取りをする度にパスワードを入力するのは
煩わしいですし、パスワードを管理するのもめんどくさいです。

今回は、公開鍵暗号方式によりパスワード入力を不要にします。

鍵認証の技術は複雑かもしれませんが、設定は簡単な数ステップの操作を実行するだけです!

環境

クライアントOS

OSはWindows 8(64-bit)、SVNクライアントはTortoizeSVNです。
TortoizeSVNのインストールはしておいてください

サーバーOS

Linux(CentOS5.5 64-bit)で、OpenSSHを使用します。
OpenSSHのインストールはしておいてください

サーバー上のユーザー名は「taiyakisan」とします。

サーバー名は「lapislazuli」とします。

今回必要になるソフトウェア

クライアントでSSH公開鍵/秘密鍵を作成します。
鍵の作成にPuTTYを使用します。

私はPuTTY 0.60 ごった煮版を使用しました。
http://yebisuya.dip.jp/Software/PuTTY/

クライアント側で行う作業

鍵の生成

公開鍵/秘密鍵のペアを生成します。
PuTTYをインストールしたフォルダ内のputtygen.exeを実行します。


上のダイアログが表示されたら[生成]ボタンを押します。
マウスの動きから鍵を生成するので、適当にマウスを動かしてください。


続いて、上図(1)の公開鍵/秘密鍵を使うためのパスフレーズを入力します。
これはサーバのパスワード等とは何も関係がないので好きな文字列を入れてください。

それが終わったら上図(2)の鍵の保存を行います。保存するのは秘密鍵だけでいいです
ここでは保存したファイルを「C:\temp\id_rsa.ppk」とします。

鍵をpageant秘密鍵パスフレーズを登録する

pageant秘密鍵パスフレーズを登録すると、サーバーとの接続時に
いちいち「どの秘密鍵を使いますか?」「秘密鍵パスフレーズは?」と聞かれずに済みます。

#というか毎回上のことを聞かれてたらなんのための鍵認証かわかんないですよね。
#パスワード認証と変わんないじゃん、という感じですね^^;

PuTTYをインストールしたフォルダ内のpageant.exeを実行します。
タスクトレイアイコンにpageant.exeのアイコンが追加されるのでダブルクリックします。


上のダイアログが表示されたら[鍵の追加]ボタンを押します。
先ほど保存した秘密鍵「C:\temp\id_rsa.ppk」を指定します。
パスフレーズを求められたら入力してください。


すると上図のように鍵のフィンガープリントが表示されて鍵の追加が完了します。

注意点として、この設定はOSの再起動ごとに行う必要があります。
またサーバーとの接続時にはこのpageant.exeを起動して常駐させておく必要があります。
(タスクトレイにアイコンがあれば常駐してます)

SubversionPuTTYplink.exeの場所を教える

plink.exeはPuTTYコマンドライン版のようなもので、Subversionはこれを使用して
サーバーへSSH接続を行います。

今回は簡単な方法としてWindows環境変数plinkの場所を設定する方法を採用します。

環境変数SVN_SSHを作成して、plinkのパスは"\"を"/"にしてフルパスを入力します。
デフォルトでは「C:/ProgramFiles (x86)/PuTTY/plink.exe」を入力すればよいです。
64-bitOSでない場合は"( x86)"を抜いたパスになります

サーバ側で行う作業

OpenSSHで鍵認証機能を有効にする

PuTTYTeratermを使ってLinuxに接続します。

/etc/ssh/sshd_confをviなどで以下のように編集します。
すでに有効にしている場合は、設定の必要はありません。

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

↓ #を外す。

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

続いて、以下のコマンドで設定ファイルに誤りがないか確認します。

/usr/sbin/sshd -t

誤りがないことを確認したら、以下のコマンドでsshdを再起動します。

service sshd restart
公開鍵の設定を行う

PuTTYTeratermを使ってLinuxに接続します。


続いてputtygen.exeで生成した公開鍵、すなわち上図の赤い四角無い部分をコピーします。
公開鍵の内容は人によって異なります

サーバー側のtaiyakisanユーザーのホームディレクトリ配下に「.ssh」フォルダを作ります。

taiyakisanでサーバーにログイン。
cd ~
mkdir -p .ssh
cd .ssh

上記に続き、公開鍵の内容を「authorized_keys」というファイルに入力します。

echo "(上でコピーした公開鍵の文字列)"
ディレクトリのオーナーとパーミッションの設定

以下のディレクトリ・ファイルのオーナーとパーミッションが適切なものになっていないと
鍵認証のSSH接続がうまく動作しません
。chownコマンドとchmodコマンドで以下のの通りに
設定してください。

ディレクトリ                オーナー       パーミッション

[taiyakisanユーザーのホームディレクトリ]  ←taiyakisan:taiyakisan  0755
 └[.ssh]                ←taiyakisan:taiyakisan  0700
  └[authorized_keys]          ←taiyakisan:taiyakisan  0600

接続テスト

いよいよ接続テストです。
クライアントで以下のコマンドを実行して、パスワードを聞かれずに
「hello」とechoコマンドの結果が返ってくれば、鍵認証接続成功です!!
(1回目はパスフレーズを聞かれるかも・・・)

C:\>"%SVN_SSH%" taiyakisan@lapislazuli echo hello
hello

上記が成功したら、今度はTortoizeSVNでsvn+sshプロトコル
リポジトリブラウザを見る等行ってください。
パスワードを聞かれずにリポジトリとやりとりができれば成功です。

うまく接続できない場合は・・・

OpenSSHの接続がうまくいかない場合は、以下のログに何か出ているかもしれません。
/var/log/messages
/var/log/secure

また私がやらかしたミスとして、公開鍵のファイルを直接編集して、
その過程で先頭の「s」が抜けてsh-rsa...となってしまい接続できないこともありました^^;

またパーミッションなどは忘れがちな部分となりますので、十分に見直してみてください。

プライバシーポリシー お問い合わせ