kazmax - Linux で自宅サーバー

鍵交換方式によるssh接続

鍵交換方式でのssh接続のやり方の説明です。

端末Aから端末Bに「鍵」というものを使って接続するだけなのですが、このやり方ググると鍵の難しいお話がいっぱいあるのでシンプルに。

やり方は簡単です。
端末Aから端末Bに「鍵」を使って接続したいなら、端末Aで作った鍵を端末Bに登録するだけ。

もちろん端末Bでは鍵交換方式でのアクセスを受け入れる設定が必要となります。 やる事はそれだけです。

端末AがLinuxの場合の説明はこのページ。
端末AがWindowsの場合の説明は鍵交換方式によるssh接続( windowsから )で説明しています。

Last Update : 2007年03月20日

鍵交換方式によるssh接続 手順

端末Aから端末Bに接続するとして。

  1. 端末Bで鍵認証を受け入れる設定の確認(sshd_configの設定)
  2. sshd 再起動(手順1でsshd_configを編集した場合)
  3. 端末Aで鍵作成
  4. 端末Aの鍵を端末Bに登録
  5. ログイン

1. 端末Bで鍵認証を受け入れる設定の確認(sshd_configの設定)

どんなに鍵を作成しても、sshサーバー(端末B)が鍵での認証を受け付けないのでは頑張っても無理です。 ここで受け入れ設定を行います。

/etc/ssh/sshd_config ファイルが設定ファイルです。
vi などでファイルを確認・編集します。 編集は、root 権限で行います。

[root@localhostB ~]# ls -l /etc/ssh/sshd_config
-rw-------  1 root root 3059  9月  5  2006 /etc/ssh/sshd_config

[root@localhostB ~]# vi /etc/ssh/sshd_config
・・・
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile     .ssh/authorized_keys
・・・

↓ 上記の項目の「 # 」を消す。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile     .ssh/authorized_keys

また、各項目の意味は以下の通りです。

項目名 意味
RSAAuthentication RSA認証の許可するかどうか。yes / no で設定。
今回は、yes。
PubkeyAuthentication 公開鍵認証の許可するかどうか。yes / no で設定。
今回は、yes。
AuthorizedKeysFile 公開鍵の保存場所を指定。

また、パスワード認証でのログインを禁止する場合は、以下の項目を「 no 」に設定します。
ただ、設定途中でつながらなくなると困るので、鍵での接続が成功してから直した方がいいと思います。

PasswordAuthentication yes
↓ 上記の項目に「 no 」を指定。
PasswordAuthentication no

2. sshd 再起動(手順1でsshd_configを編集した場合)

手順1で、「 /etc/ssh/sshd_config 」を編集した場合は、「 sshd 」を再起動させ、設定を反映させます。

注意点が2つ。

  1. コンソールで作業している場合はいいのですが、リモートからの作業の場合は念の為、今のセッションを切断しない。
  2. いきなり再起動すると「 /etc/ssh/sshd_config 」が間違っていた場合、sshdがおちて切断されるので、「 /etc/ssh/sshd_config 」に間違いがないかテストしてから再起動する。

の2点が注意点。というか自分が気を付けてるところです。

[root@localhostB ~]# which sshd
/usr/sbin/sshd
[root@localhostB ~]# /usr/sbin/sshd -t← テスト(/usr/sbin/sshd はフルパスで。)
[root@localhostB ~]#← sshd_config に間違いが無ければ何も表示されません。

間違いがあると教えてくれます。
[root@localhostB ~]# /usr/sbin/sshd -t
/etc/ssh/sshd_config: line 43: Bad configuration option: i
/etc/ssh/sshd_config: terminating, 1 bad configuration options

問題無ければ再起動します。
[root@localhostB ~]# service sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

※service コマンドがなければ以下の方法とか。
                (ディストリビューションによってさまざまですが。)
[root@localhostB ~]#  /etc/init.d/sshd restart
sshd を停止中:                                             [  OK  ]
sshd を起動中:                                             [  OK  ]

3. 端末Aで鍵作成

次に、端末Bに登録する鍵を端末Aで作成するのですが、1つのコマンドで鍵が2種類作成されます。
公開鍵と秘密鍵というものです。公開鍵を端末Bに登録する事になります。

また、鍵に対するパスフレーズ(パスワード)を入力する場面があるのですが、
ここで何も入力しなければ、鍵のみ(パスフレーズの入力無し)でのログインが可能となります。

鍵の作成

[hoge@localhostA ~]$ ssh-keygen -t rsa← 鍵作成コマンド
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa):
        ↑鍵の出力先を入力。変えたければパスを指定。そのままでよければエンター。
Enter passphrase (empty for no passphrase):
        ↑パスフレーズ入力。パスフレーズ無しでログインしたければそのままエンター
Enter same passphrase again:もう一度パスフレーズ入力
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
8c:14:75:77:b6:63:d6:03:2a:e7:06:6a:e5:b6:db:72 hoge@localhostA

また、オプションの意味は以下の通りです。

項目名 意味
-t [鍵の種類] 生成する鍵の種類を指定。( rsa1,rsa,dsa )
rsa1: ssh version1
rsa : ssh version2
dsa : ssh version2

これで鍵は作成されました。 確認してみましょう。

[hoge@localhostA ~]$ ls -la /home/hoge/.ssh
合計 16
drwx------  2 hoge hoge 4096  3月 19 01:56 .
drwxr-xr-x  7 hoge hoge 4096  3月 19 01:56 ..
-rw-------  1 hoge hoge  963  3月 19 01:56 id_rsa ← 秘密鍵
-rw-r--r--  1 hoge hoge  220  3月 19 01:56 id_rsa.pub ← 公開鍵

中身は単なるテキストです。

4. 端末Aの鍵を端末Bに登録

次に、端末Aで作成した公開鍵を、端末Bに登録します。
登録とは言ってますが、ファイルを作成して作成した公開鍵のテキストをコピーするだけです。

端末Bのログインユーザーのホームディレクトリ配下に「 .ssh 」ディレクトリを作成し、その中に「 authorized_keys 」というファイルを作成し、「 authorized_keys 」ファイルに公開鍵の中身をコピーします。

公開鍵は単なるテキストなのでコピペでもいいし、scp やrsyncで転送してもいいし、フロッピーで移すとかでもいいです。

[hoge@localhostB ~]$ cd ← ホームディレクトリにて
[hoge@localhostB ~]$ mkdir .ssh

※ id_rsa.pubを転送した場合
[hoge@localhostB ~]$ ls -la
drwx------   2 hoge  hoge  4096  3月 19 01:56 .ssh
-rw-r--r--  1 hoge hoge  963  3月 19 01:56 id_rsa.pub
[hoge@localhostB ~]$ cat id_rsa.pub >> .ssh/authorized_keys

※ コピペの場合
[hoge@localhostB ~]$ vi .ssh/authorized_keys← id_rsa.pubの内容をコピー

5. ログイン

端末Aから端末Bにログインします。

1回目のみ以下のコマンドを使用します。

[hoge@localhostA ~]$ ssh -i .ssh/id_rsa localhostB
                                ↑「 -i 」にid_rsa (秘密鍵)を指定する

パスフレーズを設定した場合は、ログインユーザーのパスワードではなく、秘密鍵に設定したパスフレーズを入力します。
また、パスワード無しの場合はそのままログインできます。2回目以降は通常通りのやり方でログインできます。

また、端末Bの「 sshd_config 」の「 PasswordAuthentication 」が「yes」のままの場合は、 パスワードログインができる環境となっています。 「 no 」に変更すれば、パスワードログインを禁止にする事ができます。

memo

作成した公開鍵と秘密鍵は使い回しが可能です。

端末Bで作った公開鍵を、端末B、端末C、端末Dに登録すれば、1つの秘密鍵で全てのサーバにアクセスできます。 頭悪い自分は端末B用に1つ作成して、端末C用に作成してとかやってましたが、無意味です。1つでOK。

要は登録した公開鍵と、自分が持っている秘密鍵がペアになっている事が重要で、 端末Aで作った秘密鍵を別のサーバにもっていけば、その秘密鍵で端末Bに接続できます。 端末Aで作った秘密鍵をWindowsにもってくれば、Windowsからも接続できます。