MacBookからの公開鍵認証によるSSH接続を設定する

MacBookで公開鍵のキーペアを作成し、Linuxサーバへ配置することで公開鍵認証によるSSH接続を設定します。イメージ的にはこんな感じ。(灰色:秘密鍵、黄色:公開鍵)

AWS使っていると、サーバ側でキーペアが作成されて、秘密鍵をダウンロードさせられるから、イメージが逆になるんだよね。発想が逆転していてある意味すごいと思う。

まずはMacBook側でキーペアを作成

MacBook側でコンソールを開き、以下のコマンドを実行して公開鍵認証用のキーペアを作成。既にキーペアを作っていてそれを利用する場合は、この手順は実行しなくて良い。

$ ssh-keygen -t rsa
  Generating public/private rsa key pair.
  Enter file in which to save the key (/Users/yukio/.ssh/id_rsa): 
                            ↑このパスとファイル名でキーが作成される
  Created directory '/Users/yukio/.ssh'.
  Enter passphrase (empty for no passphrase):   ←公開鍵のパスワードを入力
  Enter same passphrase again:                  ←パスワードを再入力
  Your identification has been saved in id_rsa.
  Your public key has been saved in id_rsa.pub.
  The key fingerprint is:
  SHA256:---------------------------------------
  The key's randomart image is:
  +---[RSA 2048]----+
  |        oo  .o.  |
  |       o.*o=+.   |
  |         ..=     |
  |    o X So =o+   |
  |   . * .  ooo    |
  |    . +    o.o   |
  |     B o o+ Eo   |
  |    .    .=..    |
  |         o+..    |
  +----[SHA256]-----+

アクセス権を変更します。

サーバサイドとか全く未経験だと「なんでかな?」とか疑問に思うかもしれないけど、というか僕は最初の頃思っていたんだけど、単純な話でこれを同一サーバを使っている他のユーザも読み込み変更可能だったりすると、ファイル自体を変更されたり内容を読まれてしまうのはマズイよねってことだと思ってください。

$ chmod 600 ~/.ssh/id_rsa*

キーペアの内容を確認。下のようになっていればオッケー

$ ls -l ~/.ssh/id_rsa*
-rw-------  1 yukio  staff  1766  5 27 09:40 /Users/yukio/.ssh/id_rsa     ←秘密鍵
-rw-------  1 yukio  staff   394  5 27 09:40 /Users/yukio/.ssh/id_rsa.pub ←公開鍵

 

サーバ側に公開鍵を配布

キーペアが作成できたら、サーバ側に公開鍵を配布します。まずはサーバ側にログインして、鍵を配置するためのフォルダを作成。

※サーバに接続(ユーザはSSH接続でログインするユーザ)
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh

サーバ側にフォルダを作成したら、Macに戻ってSPCコマンドでファイルを送信します。

$ scp ~/.ssh/id_rsa.pub ユーザID@サーバのアドレス:~/.ssh/authorized_keys

“~”はホームディレクトリを指しています。”scp”コマンド直後に指定しているのはMac側の公開鍵のパスで、”ユーザID”と”サーバのアドレス”は配置したい先のサーバを指定し、その後の記述は配置先に”authorized_keys”というファイル名で配置。

サーバ側でポート制限をしている場合は、以下のコマンドになります。(xxxxx:ポート番号)

$ scp -P xxxxx ~/.ssh/id_rsa.pub ユーザID@サーバのアドレス:~/.ssh/authorized_keys

公開鍵認証でSSH接続してみる

サーバ側に公開鍵も配置できたので、SSH接続できるか確認しておきます。

$ ssh -i ~/.ssh/id_rsa ユーザID@サーバのアドレス 

接続の時にMac側で指定するのは秘密鍵の方です。キーペア作成時にパスワードを設定している場合は、パスワードを聞かれるので入力。設定していない場合はそのまま接続される。

サーバ側でポート制限をしている場合は、以下のコマンドになります。(xxxxx:ポート番号)

$ ssh -i ~/.ssh/id_rsa -p xxxxxユーザID@サーバのアドレス

毎回このコマンドで接続しても良いんだけど、長いのでメモしておいて毎回コピペとかも面倒だと思う。

そういう場合は、”config”の設定をすれば、簡単に接続できるようになります。

$ vim ~/.ssh/config
※以下を追加する
Host odroid                   ← 名前は接続するときに使うので好きなもので
  Hostname xxx.xxx.xxx.xxx    ← IPアドレス
  User ユーザID                ← 接続ユーザID
  IdentityFile ~/.ssh/id_rsa  ← 秘密鍵のアドレス
  Port xxxxx                  ← ポート番号(ポートを制限している場合)

“config”を設定してしまえば、次回からは下の単純なコマンドで接続できるようになる。

$ ssh odroid

この程度なら流石に覚えられるw

接続できたら終わりではないよー

公開鍵認証に変更するのは、利便性向上ではなくセキュリティ向上のため。なので、サーバ側がSSH接続のパスワード認証を受け付けたままでは意味がないので、サーバ側の設定を変更します。

サーバ側にログインして、まずはSSH設定ファイルのバックアップ。

$ cp /etc/ssh/sshd_config /etc/ssh/sshd_config.old

バックアップが取れたら”sshd_config”ファイルを編集して、パスワード認証を禁止に設定する。

$ vim /etc/ssh/sshd_config

~
PasswordAuthentication yes ←この部分を"no"に変更。コメントアウトは外す。
~

変更が終わったら、余計なところを変更していないかを検出するためにも、diffで確認する。変えたつもりなくても、いつの間にか変わっていることはたまにあるので、習慣はつけておいた方がいい。人間って不便。

$ diff /etc/ssh/sshd_config.old /etc/ssh/sshd_config

続いて構文のチェック。
※実行後に何も表示されなければOK

$ sshd -t

SSHの設定を反映するため再起動

$ service sshd restart

再起動後、パスワード認証でアクセスしてエラーになればオッケー。一度接続してしまうとPC側で自動的に公開鍵認証アクセスをしてしまうかもしれないので、その場合は一時的に秘密鍵を別名にしてしまうなどすれば確認できる。

例えばこんな感じで

$ mv ~/.ssh/id_rsa ~/.ssh/id_rsa.bk

確認できたら戻しておこうね。

$ mv ~/.ssh/id_rsa.bk ~/.ssh/id_rsa

また、公開鍵認証でアクセスしてログインできるかも確認する。

公開鍵認証で問題なくログインできればオッケーだよ!(。・ω・)ノ゙