SSH接続(公開鍵認証方式)の設定方法

SSH接続(公開鍵認証方式)の設定方法

SSH接続(公開鍵認証方式)の設定方法

公開鍵認証方式でのSSH設定を記載します。




SSH接続にはパスワード認証方式も有ります。
それぞれのSSH接続方法でのTeraTermマクロでの
自動ログイン設定については以下のページに記載しました。


またCentOS7でのSSH接続(公開鍵認証方式)の設定方法は以下のページに記載しました。


本ページの目次



A. 接続先(SSHサーバ)がCentOS5_2、接続元(SSHクライアント)がWindowsの場合

基本的にはWindows端末(接続元)でキーペアを作成し、公開鍵を接続先へ渡す方法のほうが
推奨されるよう(秘密鍵を渡すのはリスクが伴なうため)ですが今回は敢えて接続先でキーペアを
作成し、接続元へ秘密鍵を渡す手順で行ないます。



事前設定


まず始めにSSH接続用にユーザーを作成します。

[root@centos52 ~]# useradd user1
[root@centos52 ~]# passwd user1


この時点で正しくSSH接続(パスワード認証)を行えることを
確認します。TeraTermを使用しSSH接続を行いました。
この接続ウィンドウはそのまま残しておきます。


SSHサーバがインストールされているか検索します。

[root@centos52 ~]# rpm -qa | grep ssh
openssh-4.3p2-41.e15
openssh-clients-4.3p2-41.e15
openssh-askpass-4.3p2-41.e15
openssh-server-4.3p2-41.e15


/etc/sshディレクトリには以下のものが有りました。

[root@centos52 ~]# ls /etc/ssh
moduli
ssh_config
sshd_config
ssh_host_dsa_key
ssh_host_dsa_key.pub
ssh_host_key
ssh_host_key.pub
ssh_host_rsa_key
ssh_host_rsa_key.pub




sshd_configの設定変更


sshd_configのバックアップを取っておきます。

[root@centos52 ~]# cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config_old

※-aオプションの意味は、「できるだけ属性や構造を保持する。」


SSHの設定をするためにviエディタでsshd_configを編集します。

[root@centos52 ~]# vi /etc/ssh/sshd_config


以下の4点を編集しました。

rootログインを拒否する。
#PermitRootLogin yes
PermitRootLogin no


空パスワードでのログイン禁止にするために
#PermitEmptyPasswords no
PermitEmptyPasswords no


パスワードでのログインは拒否
PasswordAuthentication yes

PasswordAuthentication no

へ変更しました。


公開鍵認証方式を使用する
#PubkeyAuthentication yes

PubkeyAuthentication yes

へ変更しました。


編集後、SSHサービスを再起動します。

[root@centos52 ~]# /etc/rc.d/init.d/sshd restart




公開鍵/秘密鍵ペアの作成


ユーザーをuser1へ切り替えます。

[root@centos52 ~]# su user1


公開鍵/秘密鍵のペアを作成します。

[user1@centos52 ~]$ ssh-keygen -t rsa


※~/.sshディレクトリが作成され、そこに2つの鍵ファイルが作成されます。
パスフレーズは1〜4文字では弾かれるようです。


2つのファイルが作成されたことを確認します。
「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵です。


[user1@centos52 ~]$ ls ~/.ssh
id_rsa
id_rsa.pub


公開鍵を公開鍵リストに追加


「id_rsa.pub」の内容を「authorized_keys」という名前の
新規ファイルへ入れこみます。
教科書的に言えば、「生成した公開鍵を公開鍵リストに追加します。」

[user1@centos52 ~]$ touch /home/user1/.ssh/authorized_keys
[user1@centos52 ~]$ cd /home/user1
[user1@centos52 ~]$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys


※「authorized_keys」には複数の公開鍵の内容を入れられるため
今後追記することも想定してか、初回から「>>」を使用するのが一般的のようです。


※RSA公開鍵を使用する場合は、RSA公開鍵の内容を 「authorized_keys」に入れ、
DSA公開鍵を使用する場合は、DSA公開鍵の内容を「authorized_keys2」 に入れます。


「authorized_keys」のパーミッションを600に設定します。

[user1@centos52 ~]$ chmod 600 .ssh/authorized_keys



秘密鍵を接続先(CentOS)から接続元(Windows)へ渡す。


「id_rsa」ファイルをWindowsへコピーします。
ネットワークを経由せずに記憶媒体で送る方が安全ではあります。
今回はSSH(パスワード認証)で「id_rsa」ファイルをコピーしました。
先ほどから接続していたTeraTermのメニューの「ファイル」→
「SSH SCP」から「id_rsa」ファイルをコピーします。


コピーし終わったら接続先(CentOS SSHサーバ)内の「id_rsa」は削除しておきます。
残りの「id_rsa.pub」の扱いについては、他のSSHサーバでも流用しないのであれば削除で
良いかと思います。



Windowsから公開鍵認証方式にてSSH接続


SSH接続ソフトはTera Termを使用しました。


Tera Term(UTF-8やSSH/SSH2に対応した「Tera Term Pro」の拡張版)ダウンロードページ


接続先のIPアドレスを入力し、SSH2を選択して「OK」をクリックします。
クリックした後、5秒くらい待つと初回接続時はknown_hostsファイルへ
登録するかを確認してくるので承認して下さい。



キーを作成したユーザー名、作成した際のパスフレーズ、RSA鍵の場所を
指定し「OK」をクリックします。



ログイン出来ました。




B. 接続先(SSHサーバ)、接続元(SSHクライアント)共にCentOS5_2の場合

接続元でキーペアを作成し、公開鍵を接続先へ渡す方法です。


事前設定

はじめに接続元でSSH接続用にユーザーを作成します。

[root@centos52_NO2 ~]# useradd user5
[root@centos52_NO2 ~]# passwd user5


ユーザーをuser5へ切り替えます。

[root@centos52_NO2 ~]# su user5



接続元で公開鍵/秘密鍵ペアの作成


[user5@centos52_NO2 ~]$ ssh-keygen -t rsa

※~/.sshディレクトリが作成され、そこに2つの鍵ファイルが作成されます。
パスフレーズは1〜4文字では弾かれるようです。


2つのファイルが作成されたことを確認します。
「id_rsa」が秘密鍵、「id_rsa.pub」が公開鍵です。


[user5@centos52_NO2 ~]$ ls ~/.ssh
id_rsa
id_rsa.pub



公開鍵を接続元から接続先へ渡す。

「id_rsa.pub」の方を接続先へ送ります。
今回はファイル共有で接続先の /home/user5/ へ送りました。
送った後の接続元の「id_rsa.pub」は削除しておきます。


※SCPコマンドで送る場合

接続先の/etc/ssh/sshd_configファイルをviエディタで開き、

PasswordAuthentication yes

に編集します。


その後接続元から接続先へSCPで送ります。

[user5@centos52_NO2 ~]$ scp .ssh/id_rsa.pub 192.168.179.128:/home/user5/


「The authenticity of host........ 」と表出され、
承認すると「known_hosts」が作成されます。




受領した公開鍵を公開鍵リストに追加


接続先での操作に移ります。
接続先でも同じ名前のユーザーを作成します。


[root@centos52 ~]# useradd user5
[root@centos52 ~]# passwd user5


ユーザーをuser5へ切り替えます。

[root@centos52 ~]# su user5


ホームディレクトリ直下に「.ssh」ファイルを作成します。

[user5@centos52 ~]$ mkdir .ssh


「.ssh」ファイルの権限を700にします。

[user5@centos52 ~]$ chmod 700 .ssh


接続元から貰った「id_rsa.pub」の内容を「authorized_keys」という
名前の新規ファイルへ入れこみます。
教科書的に言えば、「接続元で生成した公開鍵を接続先の公開鍵リストに追加します。」

[user5@centos52 ~]$ touch /home/user1/.ssh/authorized_keys
[user5@centos52 ~]$ cd /home/user1
[user5@centos52 ~]$ cat .ssh/id_rsa.pub >> .ssh/authorized_keys


※「authorized_keys」には複数の公開鍵の内容を入れられるため
今後追記することも想定してか、初回から「>>」を使用するのが一般的
のようです。


※RSA公開鍵を使用する場合は、RSA公開鍵の内容を「authorized_keys」 に入れ、
DSA公開鍵を使用する場合は、DSA公開鍵の内容を「authorized_keys2」 に入れます。


「authorized_keys」のパーミッションを600に設定します。

[user5@centos52 ~]$ chmod 600 .ssh/authorized_keys



接続先でsshd_configの編集


rootユーザーへ変更します。


sshd_configのバックアップを取っておきます。

[root@centos52 ~]# cp -a /etc/ssh/sshd_config /etc/ssh/sshd_config_old

※-aオプションの意味は、「できるだけ属性や構造を保持する。」


SSHの設定をするためにviエディタを使用してsshd_configを編集します。

[root@centos52 ~]# vi /etc/ssh/sshd_config


以下の4点を編集しました。


@rootログインを拒否する

#PermitRootLogin yes
PermitRootLogin no


A空パスワードでのログイン禁止にする

#PermitEmptyPasswords no
PermitEmptyPasswords no


Bパスワードでのログインは拒否する

PasswordAuthentication yes

PasswordAuthentication no

へ変更しました。


C公開鍵認証方式を使用する

#PubkeyAuthentication yes

PubkeyAuthentication yes

へ変更しました。


編集後、sshdサービスを再起動します。

[root@centos52 ~]# /etc/rc.d/init.d/sshd restart



接続元から公開鍵認証方式にてSSH接続

接続元の操作に移ります。


「ssh 接続先のIPアドレス」を入力します。

[user5@centos52_NO2 .ssh]$ ssh 192.168.179.128


※入力した時点で、万一「.ssh」ディレクトリに
秘密鍵「id_rsa」が無い場合はログインできません。

[user5@centos52_NO2 .ssh]$ ssh 192.168.179.128

Permission denied (publickey,gssapi-with-mic).


通常は以下のように聞かれるので「yes」と入力します。

※入力した時点で「.ssh」ディレクトリの中に「known_hosts」ファイルが作成されます。
※「.ssh」ディレクトリの中に「known_hosts」が作成されれば次回からは聞かれません。


The authenticity of host ,192.168.179.128 (192.168.179.128), can,t be established.
RSA key fingerprint is f3:6f:b3:99:4b:db:29:f1:66:72:ea:b4:3b:92:93:08.
Are you sure you want to continue connecting (yes/no)? yes


以下のように聞かれるのでパスフレーズを入力します。

Warning: Permanently added ,192.168.179.128, (RSA) to the list of known hosts.
Enter passphrase for key ,/home/user5/.ssh/id_rsa,:


ログインできました。

Last login: Sat Sep 4 22:31:21 2010 from 192.168.179.129


パスフレーズの入力を省く方法は以下です。
※通常ユーザーでは実行不可でした。

eval `ssh-agent`


ssh-add ~/.ssh/id_rsa


ssh-agentについては以下のサイトが詳しいです。