Twitterに投稿 はてなブックマークに追加 Google Bookmarksに追加

目次 >> SSH >> 公開鍵認証

SSHの設定 - 公開鍵認証

公開鍵認証を使い、パスワードなしでアクセスする方法である。
この方法は、単にパスワードを入力する手間が省ける以外に、例えば、SSHを経由してのrsyncやsshfsなどを運用する場合に必要となる。

sshでパスワードなしでアクセスするには?

まず、クライアント側(アクセスする側)でパスフレーズなしの公開鍵を下記の要領で作成する。Enter passphraseと聞かれたら何も入力せずにリターンキーを押す。

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/v/home/foo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /v/home/foo/.ssh/id_rsa.
Your public key has been saved in /v/home/foo/.ssh/id_rsa.pub.
The key fingerprint is:
45:eb:52:5f:ad:8c:f3:c5:b5:45:f7:5r:1d:98:c5:b4 foo@example
The key's randomart image is:
+--[ RSA 2048]----+
| . *+ |
| . .+o o+|
| + .E*|
| + .++ +*|
| S . + +.=|
| . o++ |
| o |
| |
| |
+-----------------+

すると、$HOME/.ssh/id_rsaと$HOME/.ssh/id_rsa.pubという二つのファイルが作成されるはずである。

このうち、id_rsa.pubをサーバ側(アクセスされる側)に持って行く。持って行くといっても、このファイルをそのままアップロードするのではなく、実際にはファイルの内容を、サーバ側の$HOME/.ssh/authorized_keysに追加する。authorized_keysというファイルが存在しない場合は、id_rsa.pubをアップロードして、authorized_keysにリネームしても良い。そして、authorized_keysファイルのアクセス権を0600すなわち、owner(ファイルのオーナーが誰かも注意。特にrootで作業している場合、ユーザーではなくrootがファイルのownerになっている場合があると駄目である)のみ読み書きができるように設定する。また.sshディレクトのアクセス権も0700(0600ではダメ)になっているか確認する。

もしパスワードでログイン可能な状態であれば、ssh-copy-idコマンドを使えばより容易に、id_rsa.pubをauthorized_keysに追加できる。
使い方は、

ssh-copy-id foo@example.com

以上で、パスワードなしでアクセスできるようになる。

sshでパスワード認証ではログインできるが公開鍵認証ではログインできない場合は?

たいていの場合、.ssh内のファイルのアクセス権が自分以外でも読み書きできたり、ホームディレクトリのアクセス権が他人でも書き換えられるようになっていると、sshは安全のため、認証を行わなくなる。

.ssh/authorized_keysは600が原則。

.sshディレクトのアクセス権は0700(0600ではダメ)。

ホームディレクトリは最低でも755にしておく。

PuTTyで使えるようにするには?

PuTTyは、特にWindows上ではWinSCPと連携して使いやすいSSHクライアントである。

PuTTyおよび内部でPuTTyを使うWinSCPは独自形式の鍵を使っている。

OpenSSH形式からPuTTy形式への変換

OpenSSHで作成したをPuTTyで使えるようにするには、PuTTyに付属するPuTTYgenを使って変換する。
具体的には、[load]ボタンでOpenSSHで作成したプライベートキーを読み込み(すべての拡張子を表示するようにする必要がある)、それは[Save private key]で保存するだけである。すると、PuTTy形式の.ppkキーが作成される。

なお同じ要領で、AWSの.pemキーも変換することができる。

PuTTy形式からOpenSSH形式への変換

PuTTYgenはPuTTy形式のキーペアを作成することもできる。

秘密鍵はPuTTYgenのメニューの[Conversions]-[Export OpenSSH key]で変換保存できる。

一方、公開鍵は、PuTTYgenではOpenSSHに変換できない。OpenSSHで使えるようにするには、OpenSSHのssh-keygenを使って、

$ ssh-keygen -i -f id_rsa_putty.pub > id_rsa_openssh.pub

のようにすればよい。そして、変換された文字列をauthorized_keysに追加する。

Windowsの商用SSHクライアントからLinuxのOpenSSHサーバにパスワードなしでアクセスするには?

商用SSH(学術機関などではフリーで使えるバージョンが公開されている)とOpenSSHでは鍵を変換しないと使えない。まず、クライアント側Windowsのコマンドプロンプトで、公開鍵を以下の要領で作成する。

C:\>ssh-keygen2 -t rsa
Generating 2048-bit rsa key pair
5 oOo.oOo.oOo.
Key generated.
2048-bit rsa, foo@BAB4380083, Fri Apr 07 2006 05:28:47
Passphrase :
Again :
Key is stored with NULL passphrase.
(You can ignore the following warning if you are generating hostkeys.)
This is not recommended.
Don't do this unless you know what you're doing.
If file system protections fail (someone can access the keyfile),
or if the super-user is malicious, your key can be used without
the deciphering effort.
Private key saved to C:/Documents and Settings/foo/Application Data/SSH/UserKeys/id_rsa_2048_a
Public key saved to C:/Documents and Settings/foo/Application Data/SSH/UserKeys/id_rsa_2048_a.pub

できたid_rsa_2048_a.pubをサーバ側のLinuxに持って行く。これを次のコマンドで変換する。

$ ssh-keygen -i -f id_rsa_2048_a.pub > id_rsa_2048_a_openssh.pub

これで、id_rsa_2048_a_openssh.pubはOpenSSHで使える公開鍵に変換された。この内容を、$HOME/.ssh/authorized_keysに追加してやると、商用SSHから、パスワードなしでアクセスできるようになる。

なお、同様に、商用SSHの秘密鍵をOpenSSHで使える形式に変換するには、

$ ssh-keygen -i -f id_rsa_2048_a > id_rsa

とする。そしてid_rsaを自分のホームディレクトリ上にある.sshに移動して、アクセス権を600にする。
ファイル名は必ずir_rsaとすること。(id_rsa_2048_a_openssh等にすると、うまくいかない)


最終更新日


本文中のFC4はFedora ProjectのFedora Core 4を、FC5はFedora Core 5を、FC6はFedora Core 6をopenSUSEはNovellのSUSE Linux OSSを表します。Fedora7以降は、単にFedora7、Fedora8、Fedora9、Fedora10、Fedora11、Fedora12、Fedora13、Fedora14、Fedora15と表示しています。Ubuntuは、必要に応じて20.04、21.04のようにバージョン番号をつけて区別しています。

ここに登場するドメイン名やIPアドレスなどはフィクションです。実在の人物・団体等とは一切関係がありません。
実際に使用する際は、各自の環境に合わせて書き換えてください。
もし何か間違いなどありましたらこちらからご連絡ください
リンクに許可は不要です。
Copyright (C) 2021 Chikuma Engineering Co., Ltd. All Rights Reserved.