Gitテックラボ

PuTTYで公開鍵の作成

SSHとは

従来ではリモート接続の際にtelnetが使われていましたが、暗号化されていないため盗聴が容易でした。
その問題を解決する手段として、暗号化技術を用いた安全な通信方式のSSH(Secure SHell)が使われるようになりました。

SSHによる接続を行なうためには、サーバ側での準備と、クライアント側でSSHに対応したアプリケーションを用意する必要があります。
UNIX系やOS Xなどは標準でOpenSSHクライアントプログラムが用意されているので、特別なインストールを行わなくてもSSH接続が行えます。
WindowsでSSHを使ったリモート接続を行うには、TeraTermやPuTTYをインストールして使います。

PuTTYのインストール方法

鍵交換方式

SSHでの接続でもパスワードを使っていると、文字数の限界から総当り攻撃や辞書攻撃に弱いという欠点があります。より高いセキュリティを実現するためは、公開鍵暗号方式(Public key cryptosystem)を用いた認証が推奨されます。

ここではPuTTYでの公開鍵暗号方式を使ったSSH接続の説明をします。

Linuxで公開鍵を作成する方法は下記を参考にしてください。
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/432makesshkey.html

PuTTYで公開鍵暗号方式による認証を使うには、PuTTYのインストール時に一緒にインストールされるPuTTYgenという鍵生成アプリケーションを使います。
PuTTYをインストールしたディレクトリにputtygen.exeというファイルがあるので、それを起動します。

pkc01

鍵の種類は[SSH-2 RSA]を選択し、[生成]ボタンを押して鍵を生成します。
マウスの動きで乱数生成を行いますので、鍵が生成されるまでダイアログ上でマウスを動かします。

pkc02

鍵が生成されたら、公開鍵と秘密鍵を保存します。

pkc03

[OpenSSHのauthorized_keysファイルにペーストするための公開鍵]とあるテキストエリアの文言が公開鍵です。このあとファイルとして保存しますが、ここの文字列をauthorized_keysに反映でき

鍵を保存する際、よりセキュリティを高めるためにパスフレーズを設定することもできます。パスフレーズも設定する場合は、[鍵のパスフレーズ]にパスフレーズにしたい任意の文字列を入力し、確認のためにその下の[パスフレーズの確認]に 同じパスフレーズを繰り返し入力します。
パスフレーズの設定は任意ですので、不要な場合は飛ばして結構です。

次に、作成した鍵を保存します。[秘密鍵の保存]、[公開鍵の保存]を順にクリックして秘密鍵、公開鍵をそれぞれ保存します。
ここでは、秘密鍵を id_rsa.ppk、公開鍵を id_rsa.pub という名前で保存したことにします。

SSHサーバへ公開鍵の設置

公開鍵暗号方式による認証を行う予定のサーバにログインします。
ログイン後ホームディレクトリで .ssh ディレクトリに公開鍵を保存します。

ホームディレクトリに .ssh ディレクトリが無い場合は作成します。
.ssh ディレクトリのパーミッションを755に設定します。

mkdir .ssh
chmod 755 .ssh
cd .ssh

.ssh に authorized_keys ファイルがある場合は公開鍵の内容をペースト、無い場合は authorized_keys ファイルを作成してペーストします。

authorized_keys の作成
vi authorized_keys

上記の代わりに、公開鍵を .ssh ディレクトリに id_rsa.pub という名前でアップロードしている場合は、下記コマンドでauthorized_keysに追加します。

cat id_rsa.pub >> authorized_keys

authorized_keys のパーミッションは644または600に設定します。

chmod 600 authorized_keys

これで公開鍵と秘密鍵の準備は完了です。

PuTTY での設定

PuTTYを起動し、[接続] - [SSH] - [認証] を選択し、[参照] ボタンをクリックします。

pkc04

保存した秘密鍵を選択し、[開く] ボタンをクリックします。

[秘密鍵ファイルの選択]ダイアログが表示されるので、先に作成した秘密鍵のファイル id_rsa.ppk を選択します。

[秘密鍵ファイルの選択]ダイアログが閉じて元の画面に戻ったら、左カラムの[セッション]を選択します。

pkc05

[ホスト名]に接続先のアドレスを入力します。ユーザ名@URL のようにアカウント名を指定すると、接続時のアカウント入力を自動化することができます。

ホスト名の例
user_name@example.com

セッション一覧に任意の名前を入力し、[保存]をクリックします。次からはここでつけた名前を選べば、同じ設定で接続できるようになります。

[開く] ボタンをクリックします。
これで設定した情報でリモートに接続しますので、必要であればアカウント、パスフレーズを入力してログインしてください。ホスト名にユーザ名を指定して、鍵作成の際にパスフレーズを指定していなければ、入力なしでログインできます。

関連記事