【図解】公開鍵と秘密鍵を使ったSSH接続の設定を分かりやすく解説

SSHとは

SSHとはサーバをリモートで操作するプロトコルです。ポートはデフォルトで22番を利用します。現場ではリモートでLinuxのサーバを操作するために利用されます。SSHの略は「Secure SHell」です。Secureと言う単語あるようにSSHでアクセスすると通信はすべて暗号化され盗聴されません。認証方法はパスワード以外にも公開鍵認証が利用されます。これはデータを暗号化する公開鍵とデータを復号(解読)する秘密鍵を使って通信する暗号化方式です。公開鍵と秘密鍵はペアになっています。

公開鍵認証でアクセスする方法を紹介します。

前提

クライアントにはWindows10を利用します。サーバはLinux CentOS6または 7での解説になります。

クライアント:Windows10 (GitBashインストール)
サーバ   :Linux CentOS6 or 7

windowsで秘密鍵と公開鍵を作成

1.GitBashをインストール

Windowsで秘密鍵と公開鍵を作成するには「GitBash」を利用します。これはWindowsでBash(linuxのコマンド)が利用できる地味にすごいツールです。これを以下のURLからダウンロードしインストールします。すでにインストールされている人は飛ばしてください。

https://gitforwindows.org/

インストール画面はすべて「next」でOKです。

Git Bashを起動し秘密鍵・公開鍵を作成

プログラムメニューから「Git Bash」を起動します。起動後、以下のコードを入力し秘密鍵・公開鍵を作成します。「.ssh」フォルダはデフォルトの鍵の保存場所になります。

秘密鍵・公開鍵の作成

ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/[username]/.ssh/id_rsa): <-- 鍵を保存するフォルダ( Enterキー )
Created directory '/c/Users/[username]/.ssh'.
Enter passphrase (empty for no passphrase): <-- パスフレーズを入力( Enterキー )
Enter same passphrase again: <-- もう一度、パスフレーズを入力( Enterキー )
Your identification has been saved in id_rsa.
Your public key has been saved in id_rsa.pub.

ssh-keygenのコマンドを入力すると秘密鍵・公開鍵のペアを作成することができます。オプションを何も入力しない場合は、暗号化方式はRSA、鍵の長さは3072で作成されます。鍵の強度は鍵の長さが2048以上、暗号化方式はRSAであれば問題ありません。パスワードを入力するのが面倒な場合パスフレーズをなしにします。その場合パスフレーズを何も入力せずにEnterキーを押します。

保存場所や鍵の名前などなにも指示しない場合、秘密鍵と公開鍵は以下のフォルダに作成されます。
c:\Users[username].ssh\id_rsa   (秘密鍵)・・・ クライアントPCに配置
c:\Users[username].ssh\id_rsa.pub (公開鍵)・・・ 接続対象サーバに登録

ちなみに鍵の強度は以下のコマンドで確認することができます。
ssh-keygen -l -f ~/.ssh/id_rsa.pub

公開鍵をサーバに渡す

作成した公開鍵をサーバに渡します。渡し方は公開鍵のファイルを開いて中身をコピーし
貼り付けてもいいですが、今回はscpコマンドを使ってサーバに渡します。scpコマンドはリモートにデータをコピーするコマンドです。コピーするコマンドcpにsshのsがついています。これで盗聴されずに安全にサーバにコピーができます。

それでは「Git Bash」でscpコマンドを使って公開鍵をサーバにコピーします。前提としてサーバー側に.sshディレクトリを作成しておきます。その後以下のコマンドを入力します。

scp ./id_rsa.pub user@host:~/.ssh/authorized_keys

サーバにログインし「.sshフォルダ」と「authorized_keys」のパーミッションを変更します。

cd ~
chmod 700 .ssh
cd .ssh
chmod 600 authorized_keys

SSHの設定を変更

公開鍵認証できるようにサーバ側のsshの設定を変更します。

vi /etc/ssh/sshd_config
以下の行のコメントをはずして有効化する。

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

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

変更後sshを再起動します。
service sshd restart

SSHで認証する

それでは設定がうまくいっているか秘密鍵を使ってサーバにログインします。

ssh アカウント名@ホストIPアドレス

例rootユーザーでIPアドレス192.168.1.110の場合
ssh root@192.168.1.110

初回ログインのみ「このサーバを信頼していいか」という警告メッセージが英語で表示されます。フィンガープリントと呼ばれるハッシュ値が表示され、本当に接続していいですか?と確認してくるので「yes」と入力します。

本来ならサーバに公開鍵を渡す前にフィンガープリントを事前にメモっておき警告時に表示されたフィンガープリントの値と一致するか確認するのですが面倒なのでほとんどの場合はyesと答えておきます。

一度YESと答えると次回から聞いてきません。一度接続するとフィンガープリントはクライアントPCの「~/.ssh/known_hosts」ファイルに保存されます。

configファイルはssh接続情報を定義して保存するファイルです。これを設定すると接続するホスト情報を簡略化できたり接続が簡単になります。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする