パスワード認証を許可すると、不正アクセスで破られるなど、セキュリティ面が不安。ネットで検索しても意味不明なコマンドなどが使われていて、なにをやってるのかわかりません。
よろしい。Aiden 先生が順を追って設定方法とコマンドの意味等を説明しよう。
今回は、アクセスするクライアントは MacBook と iPad Pro を使用し、SSH は Linux (Ubuntu) を使うものとする。Linux の設定は可能な限り多くのディストリビューションに対応するように説明する。
パスワード認証のログインではなく、公開鍵を登録しているホストからのみ接続を許可したい
サーバー側は Linux で、クライアントマシンは Mac と iPad を使用したい
クライアント側で SSH の公開鍵をつくる
Mac 側
クライアントのマシンで公開鍵を作成する。
ターミナルを起動して以下のコマンドを入力する。
Aiden@MacBook:~$ ssh-keygen
..
.
Enter passphrase (empty for no passphrase): パスワード入力
Enter same passphrase: もう一度入力
..
.
キーを保存する場所はデフォルト(~/.ssh/) とし、パスワードは設定するものとする。
鍵とパスワードのセットなら尚安全。
すると、秘密鍵 ~/.ssh/id_rsa と 公開鍵 ~/.ssh/id_rsa.pub が作成される。
それぞれのパーミッションは 600、644 にする必要があるが、デフォルトでそのようになるため特に変更は不要。心配ならパーミッションを確認されたい。
aiden@aiden-mac:~$ ls -al ~/.ssh/id_rsa
-rw------- 1 aiden_pearce staff 2655 May 17 20:58 id_rsa
-rw-r--r-- 1 aiden_pearce staff 580 May 17 20:58 id_rsa.pub
-rw—— は 600、-rw-r–r– は 644。
次のコマンドを実行して、生成した公開鍵をサーバーにコピーする。(UUUはユーザー名、XXXはサーバーのIPアドレス)。
$ ssh-copy-id -p XXXX UUU@XXX.XXX.XXX.XXX
-p オプションでポートを指定する(XXX)を任意の番号に置き換える。デフォルトのポート 22 であれば不要。
iPad を使う場合
iPad で SSH 接続を行うにはアプリが必要。今回は Termius を使用。
Apple App Store から Termius をダウンロードしてインストールする。
最初にホストを登録しておく。
左の [Hosts] タブをクリックして、右上の [+] ボタンを押すとメニューが開くので [New Host] を選択する。
次に開く画面で以下の必要な情報を入力する。
Alias: この接続の名前(何でも OK)
Hostname: サーバーのアドレス( 192.168.2.22 など)
Port: 解放しているポート(デフォルトは 22)
Username: ユーザー名。毎回入力する場合は省略可能
Password: パスワード。毎回入力する場合は省略可能
*この画面をスクロールすると、Keyという項目があるが、これはまだ入力しない。
次に鍵を生成する。
左のタブから [Keychain] を選択すると、[Keychain] の画面が表示される。
右上の [+] をタップしてメニューを開く。
次に、[Generate Key] (キーの生成) を選択。
任意の名前を入力して [Type] の項目をタップすると、種類が一覧表示されるので [RSA] を選択する。
鍵の生成が完了したら、鍵の登録を行う。
[Keychain] タブを選択した状態で、作成した鍵(ここではRSA-00 )をタップする。
Export To(エクスポート先)画面が表示されるので、先ほど作成したホストを選択する。
ホスト情報が正しいことを確認して右上の [Export] ボタンをタップする。
これで鍵がサーバーに登録される。
この登録が完了したら、ホストの設定を変更して、[Key] をタップし、先ほど生成した鍵を選択する。
サーバー側の設定
サーバー側の設定では、公開鍵が登録されているクライアントからの接続のみを許可するように設定を変更して SSH サーバーを再起動する。
クライアントマシンを複数使う場合は、この操作を行う前にすべてのクライアントマシンで公開鍵の作成を終了させておく必要がある。
$ sudo vim /etc/ssh/sshd_config
RSAAuthentications yes
PubkeyAuthentication yes
PermitRootLogin no
PasswordAuthentication no
$ sudo systemctl sshd restart
さいごに
接続をテストして問題なければ完了だ。
この方法は、新たにクライアントを登録する場合に再びサーバー側の設定を戻して登録が済んでから、再び設定を行う必要があるので少し面倒ではあるが安全性は高い。
コメント