CentOS7のSSH鍵認証設定方法
CentOS7でSSHサーバを構築し、SSH鍵認証用鍵ペアをサーバ側で作成し、Windows 10のSSHクライントに秘密鍵を設定し、接続する方法を記載する。
設定環境
サーバ:Hyper-V環境のCentOS 7.7
クライアント:Windows 10
クライアント側とサーバ側で作成する鍵ペアの違い
クライアント側
クライアント側で鍵ペアで作成した場合は、公開鍵(サーバ):秘密鍵(クライアント)が1:1の鍵ペアがユーザー毎に作成され、公開鍵をサーバに登録することで、クライアントが対象者であると証明され、SSH接続を許可します。
・メリット
クライアント側で作ることで秘密鍵がネット上に流出するリスクが少ない点。
・デメリット
全クライアント分の公開鍵をサーバに登録しなければならないので、手間がかる。
サーバ側
サーバ側で鍵ペアを作成した場合は、 公開鍵(サーバ):秘密鍵(クライアント)が1:Nとなり、 サーバ側で作った秘密鍵を各クライアントに受け渡すことで、サーバにSSH接続する権限を クライアント に付与します。
・メリット
複数人で作業する際に、1つの秘密鍵を作業者全員に配るだけで良いので、手間がかからなくて済む。
・ デメリット
鍵の受け渡しや共有の際に、ネットを使えば流出の危険性がある。
サーバでのsshインストール手順
インストール確認
[root@localhost umilcl]$ yum list installed | grep ssh
openssh-server
Code language: PHP (php)
インストール未の場合は以下でインストール
[root@localhost umilcl]$ yum -y install openssh-server
設定の確認
sshdの以下の設定の確認
# ポート番号 今回はデフォルト値としますが、セキュリティ上実運用は変えた方がよい
#Port 22
# rootでのSSHログインの可否:yes ログイン可、no ログイン不可
PermitRootLogin no
# パスワード認証の可否:yes パスワード認証可、no パスワード認証不可
PasswordAuthentication no
Code language: PHP (php)
サービスの起動
[root@localhost umilcl]$ systemctl start sshd.service
ファイアウォール設定
ssh用Portの開放確認今回はPort 22のため、解放されていると思われるが、変更している場合は設定が必要。
# 解放の確認
[root@localhost umilcl]$ firewall-cmd --list-all | grep ssh
# ポート解放
[root@localhost umilcl]$ sudo firewall-cmd --permanent --add-service=ssh
Code language: PHP (php)
ポート変更有の場合のファイアウォール設定(変更なしの場合不要)
ファイアウォールのsshのポート設定変更
<?xml version="1.0" encoding="utf-8"?>
<service>
<short>SSH</short>
<description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
<port protocol="tcp" port="変更後のポート"/>
Code language: HTML, XML (xml)
ファイアウォールリスタート
[root@localhost umilcl]$ systemctl restart firewalld
[root@localhost umilcl]$ systemctl status firewalld -l
サーバでの鍵ペア作成手順
サーバ側で鍵ペアを作る
id_rsaという名前で鍵ペアを作成します。RSA 4096bitの鍵方式となります。それなりに強固です。
この作業で作った秘密鍵を、作業者に配布することになります。
[root@localhost umilcl]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/user/.ssh/id_rsa):
Created directory '/user/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /user/.ssh/id_rsa.
Your public key has been saved in /user/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:gNoQTdPhsMwaUrZaglLFCuSRRj+B3PsGJ730Bjz7AJs user@localhost
The key's randomart image is:
+---[RSA 4096]----+
|++O=… | |+Oo+. | |o=+O o |
|.=.@.B . |
|. o @ * S |
| E * o |
| . + |
| . |
| |
+----[SHA256]-----+
Code language: PHP (php)
パスワードは何も入力せずEnterを押せば設定しないことも出来ます。
公開鍵を登録(authorized_keysに登録)
[user@localhost ~]$ mkdir .ssh # .sshディレクトリ作成
[user@localhost ~]$ cd .ssh
[user@localhost .ssh]$ touch authorized_keys # authorized_keysファイル作成 [user@localhost .ssh]$ cd ~
[user@localhost ~]$ cat id_rsa.pub >> ~/.ssh/authorized_keys #公開鍵登録 [user@localhost ~]$ chmod 600 ~/.ssh/authorized_keys #パーミッションの設定
[user@localhost ~]$ chmod 700 ../.ssh #パーミッションの設定
Code language: PHP (php)
パーミッションの設定をしないと、認証が通らないので確実にやりましょう。
秘密鍵の保存
サーバにて作成されたid_rsaファイルをftpやscp等にてクライアントにコピーしてください。
クライントの保存先はC:\Users\user_name\.ssh\id_rsaに保存します。
クライアント側の秘密鍵設定
.ssh/configを編集(無ければ新規作成)
Host username@hostname
HostName hostname
User username
IdentityFile ~/.ssh/id_rsa
Code language: JavaScript (javascript)
クライアント側接続テスト
下記コマンドにてパスワード不要で接続できれば成功です。
[user@localhost ~]$ ssh -i ~/.ssh/id_rsa username@hostname
Code language: JavaScript (javascript)
最後に
上記まででSSHサーバ、クライアントの導入は完了となる。