SSHログインで公開鍵認証を使おう

 SSHクライアントからサーバーへログイン時に、公開鍵認証を利用できるようにします。

 公開鍵認証だからパスワードを覚えなくてもよいわけではなく、sudoコマンドによりroot権限でコマンド実行するときはパスワードは必要です。sudoコマンド実行時にパスワードを不要とすることは出来るので、ひとり管理者ひとり利用者ではそれでよいかもしれません。

 また、秘密鍵にはパスフレーズを設定しますが、省略することも可能ではあります。しかし可搬可能なノートPCでパスフレーズを省略すると危険ですし、デスクトップPCであっても侵入されてゴニョということは考えらます。日常パスワード・パスフレーズを使わないということは難しいと思います。秘密鍵を盗まれてパスフレーズを設定していなかったなんて考えたくないですね。

 鍵を作成するに当たって、どの環境にセットアップするかですが、Windows 10のPowerShellにしようと思います(これを書いている本人はWSLですが)。sftpソフトに秘密鍵をセットアップするにもWindows環境を使うなら、同じ秘密鍵ファイルをアクセスできたほうが便利ですからね。

Windows 10のPowerShellを準備しよう

 Windows 10では、タスクバーのウィンドウズマークを右クリックするとPowerShellへのメニューを表示します。メニューにWindows PowerShellの代わりにコマンド プロンプトであっても、同じ操作です。

202004-winmark-right-click.png

 PowerShellを起動します。ssh-keygenコマンドを実行します。-f を省略するとユーザーフォルダー直下の.sshの中に秘密鍵 "id_rsa"、公開鍵 "id_rsa.pub"が作成されます。

PS C:\Users\bar> ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\bar/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): (鍵のパスフレーズ)
Enter same passphrase again: (パスフレーズをもう一度)
Your identification has been saved in C:\Users\bar/.ssh/id_rsa.
Your public key has been saved in C:\Users\bar/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:D7..........Bik8 bar@exsample
The key's randomart image is:
+---[RSA 2048]----+
|+.+ooo+ |
|.B...o o |
|..E.o o . |
| + o.o . o |
| +o. . S . |
|oo... B |
|+o. o * + |
|... . B * |
| oooo.o.Bo |
+----[SHA256]-----+
PS C:\Users\bar> ls -l .ssh

ディレクトリ: C:\Users\bar\.ssh

Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2019/07/07 13:50 175 config
-a---- 2020/04/1x 15:31 1766 id_rsa
-a---- 2020/04/1x 15:31 398 id_rsa.pub
-a---- 2019/07/07 18:25 2436 sshd_config

次に、生成された公開鍵をサーバーへ登録なのですが、PowerShellには、ssh-copy-idコマンドがありません(同等のことを実行することはPowerShellスクリプトで実現可能)。scpコマンドで一旦サーバーへアップロードします。

PS C:\Users\bar> scp -P (ポート番号を変更していれば) .ssh/id_rsa.pub foo@exsample.com:~/
foo@exsample.com's password: (ユーザーfooのパスワード)
id_rsa.pub 100% 398 16.8KB/s 00:00
PS C:\Users\bar> ssh -p (ポート番号を変更していれば) foo@exsample.com
foo@exsample.com's password:
Last login: Sun Apr 1x 12:28:26 2020 from xxx.xxx.exsample.or.jp

SAKURA Internet [Virtual Private Server SERVICE]

[foo@exsample ~]$ ls
id_rsa.pub
[foo@exsample ~]$ mkdir -p .ssh
[foo@exsample ~]$ chmod 700 .ssh
[foo@exsample ~]$ cat id_rsa.pub >> .ssh/authorized_keys
[foo@exsample ~]$ rm id_rsa.pub

一旦、サーバーからexitして、再度sshコマンドを実行し公開鍵認証で接続できることを確認します(sshコマンドはファイルパスを省略すると".ssh/id_rsa"を読み込みます)。

PS C:\Users\bar> ssh -p (ポート番号を変更していれば) foo@exsample.com
Enter passphrase for key 'C:\Users\bar/.ssh/id_rsa':
Last login: Sun Apr 1x 12:35:00 2020 from xxx.xxx.exsample.or.jp

SAKURA Internet [Virtual Private Server SERVICE]

[foo@exsample~]$

以上まで出来ればサーバーのパスワード認証を無効にしてもよいのですが、Windows側で公開鍵認証をサポートしていないソフトウェアを使用している場合にはパスワード認証を無効にできません。

2020年4月時点でWindows 10は、OpenSSHサーバーをオプションでインストールできます。ssh-agent機能が使えるようになるので、パスワード認証のクライアントを中継できる?かなと。後で確認したいと思います。

  1. SSHクライアントを用意しよう
  2. さくらのVPSコントロールパネルからCentOS 7をインストールしよう
  3. CentOS7を初期セットアップしよう
  4. SSHログインで公開鍵認証を使おう
  5. CentOS7へWebサーバー(Apache)をインストールしよう
  6. CentOS7へTLS/SSL(Let's Encrypt)を導入しよう
  7. CentOS7へPHP(7.4)をインストールしよう
  8. CentOS7へMariaDBをインストールしよう
  9. CentOS7へメールサーバー(Postfix/Dovecot)をインストールしよう

前へ

CentOS7を初期セットアップしよう

次へ

CentOS7へWebサーバー(Apache)をインストールしよう