公開鍵認証によるサーバーSSH接続(Mac)

サーバーへのSSH接続で、パスワード認証よりも安全で
推奨されている公開鍵認証の概要とMacで行うための手順をまとめていきます。

SSH公開鍵認証の基本的な仕組み

公開鍵認証のおおまかなイメージ

まず、接続を行うクライアント側で秘密鍵公開鍵と呼ばれる認証鍵のペアを作成し
公開鍵の方を接続するサーバー側へ登録しておきます。
(秘密鍵は他人に知られてはいけません)

接続時にクライアント側だけで保存する秘密鍵とサーバー側の公開鍵を称号し、
電子署名という仕組みによって接続の正当性が確かめられます。

秘密鍵の方にパスフレーズというパスワードのようなものが必要ですが
こちらはサーバー接続に対するものではなく、ユーザに秘密鍵の使用許可を通すためのものです。

Macで公開鍵認証を行う手順

クライアントで認証鍵ペアを作成する

ターミナルから ssh-keygen コマンドで公開鍵・秘密鍵のペアを作成することが出来ます。
$ ssh-keygen -t rsa

鍵を作成する場所(デフォルトではホーム配下の不可視ディレクトリ.ssh)と
鍵を使用するためのパスフレーズを設定して実行すると公開鍵・秘密鍵のペアが作成されます。

鍵の名前はデフォルトで、公開鍵が「 id_rsa.pub」、秘密鍵が「 id_rsa 」となります。
(rsa方式の場合)

※鍵の名前はssh-keygenコマンドの -fオプション で任意で決めることも出来ます。

公開鍵を接続先へコピーする

作成した認証鍵のうち、.pubの拡張子がついた公開鍵を
ターミナルからSCPコマンドを使用して接続先のサーバーへコピーします。

SCPコマンドはSSHの仕組みを使用してファイル転送を行うためのコマンドです。

$ scp .ssh/id_rsa.pub XXX.XX.XXX.XX:/home/ken

scp  ローカル上の公開鍵の保存パス 接続先ホスト名(ipアドレス): (コロン)コピー先のディレクトリ

※sshのポート番号を変更している場合は、-Pオプションでポート番号を指定します。
(sshコマンドと違い、大文字のPとなります)

ポート番号 10022の場合
$ scp -P 10022 .ssh/id_rsa.pub XXX.XX.XXX.XX:/home/ken

コピー先に指定する場所は接続先サーバー内のhome配下ログインするユーザアカウントのディレクトリを指定しています。
(コマンド実行時にアカウントのパスワードを入力します)

コピーした公開鍵を認証用のファイルに書き込む

scpコマンドでサーバーへ公開鍵のコピーが完了したら、
公開鍵の内容を認証用ファイル .ssh/authorized_keys に書き込む必要があります。

※ /etc/ssh/sshd_config ファイルの AuthorizedKeysFile の項目で決められています。

一度サーバーへSSH接続します。(パスワード認証)

公開鍵のコピーがちゃんと出来ているかも確認しておきます。

ホームに.sshディレクトリを作成する(無い場合)

$ mkdir .ssh

.sshディレクトリの権限を編集する
$ chmod 700 .ssh/

公開鍵を.ssh/authorized_keysに書き込む

$ cat id_rsa.pub >> .ssh/authorized_keys
authorized_keysというファイルが同時に作成されます

.ssh/authorized_keysの権限を編集する
$ chmod 600 .ssh/authorized_keys

秘密鍵を利用してSSH接続する(公開鍵認証)

サーバーの接続を切って、鍵認証による接続が出来るようになったかを確かめます。

秘密鍵の権限を確認・変更する

(接続を行う前に)
接続先の .ssh/authorized_keys ファイルと同様、
クライアント(Mac)の秘密鍵もアクセス権が広いとssh接続のキーとして使用出来ませんので
確認をして権限に変更を加えておきます。

クライアント秘密鍵の権限を変更する
$ chmod 600 .ssh/id_rsa

(秘密鍵の権限を確認する)
$ ls -l .ssh/id_rsa

sshコマンド -i オプションでキーを指定して接続

sshコマンドの -iオプションで秘密鍵のパスを指定します。

$ ssh -i .ssh/id_rsa ken@XXX.XX.XX.XX
ssh -i 秘密鍵のパス ユーザ名@ホスト名

キーペア作成時に設定したパスフレーズを入力して接続出来れば鍵認証成功です。

パスフレーズの入力を省略するには

キー接続時にパスフレーズを毎回入力しないで済むように設定します。
クライアント側で ssh-add コマンドを実行し、キーに設定したパスフレーズを入力します。

$ ssh-add .ssh/id_rsa
ssh-add (キーのパス)

パスワードによるSSH接続を禁止する

公開鍵認証による接続が成功したらパスワード認証によるSSH接続が出来ないようにサーバー側で設定します。

注意
こちらを行うと鍵認証以外の接続の手段が無くなってしまいますので
必ず鍵認証による接続が成功した後に行ってください。

(サーバーへ接続)

rootユーザに切り替えて ※ /etc/ssh/sshd_configの内容を変更します。
※ssh_configファイルの方ではありません

# vi /etc/ssh/sshd_config

(Vi INSERTモードに切り替えて)

PasswordAuthentication の行を探し、コメントアウトを外してnoに変更します。

(変更前)#PasswordAuthentication yes
(変更後)PasswordAuthentication no

編集、保存が完了したらSSHサービスを再読み込みして設定を反映させます。
# systemctl reload sshd.service

パスワードによるログインが不可となっていれば設定完了です。
(検証方法は下記項目を参照)

パスワード認証を優先したい場合

公開鍵認証を設定するとSSH接続時にパスワード認証よりも優先されます。
パスワード認証を禁止にしていない状態であれば以下の方法で公開鍵認証よりも優先して行うことが出来ます。

$ ssh -o PubkeyAuthentication=no ken@XXX.XX.XX.XX

参考
http://www.unixuser.org/~euske/doc/openssh/book/chap3.html
https://blog-and-destroy.com/20453

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください