1. SSHとは
SSHは`Secure Shell`の略称で、アプリケーション層に基づいたセキュリティプロトコルです。SSHは現在最も信頼性が高く、リモートログインセッションや他のネットワークサービスにセキュリティを提供するためのプロトコルとして広く使用されています。
SSH認証には主に2つの方法があります:
- パスワードベースの認証: ログイン時にユーザー名とパスワードを入力します。ただし、パスワードはネットワーク上で送信されるため、中間者攻撃のリスクがあります。
- キーに基づく認証: 設定後、パスワードなしでログインできます。この方法はより安全で、パスワードをネットワーク上で送信する必要がありません。
2. SSH免密ログインの設定
ここでは、CentOS 7を使用して、Aサーバー (172.16.22.131) からBサーバー (172.16.22.132) へのパスワードレスログインを設定します。
2.1 必要なソフトウェアのインストール
まず、必要なソフトウェアがインストールされていることを確認します。
# ssh-keygenとssh-copy-idのインストール
[root@localhost ~]# yum install -y openssh-clients
2.2 ssh-keygenで公開鍵-秘密鍵ペアを作成する
(1) 指定されたディレクトリでRSAキーを生成し、コメントを「user」に指定します。
[root@localhost ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -C "user"
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/idrsa.pub.
The key fingerprint is:
9a:e3:94:b9:69:c8:e9:68:4b:dc:fa:43:25:7f:53:f1 user
(2) `ssh-keygen`の一般的なオプション:
- -t: 鍵のタイプ (dsa, ecdsa, ed25519, rsa)
- -f: 鍵ファイルの保存場所 (デフォルトは~/.ssh/)
- -C: 鍵のコメント
- -N: 鍵のパスフレーズ
2.3 ssh-copy-idでAの公開鍵をBに送信する
デフォルトの使い方は: `ssh-copy-id root@172.16.22.132`です。ssh-copy-idコマンドは、リモートサーバーに接続する際のデフォルトポートは22です。
[root@localhost .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@172.16.22.132
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.22.132's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -p '22' 'root@172.16.22.132'"
and check to make sure that only the key(s) you wanted were added.
2.4 AサーバーからBサーバーへのパスワードレスログイン
[root@localhost .ssh]# ssh root@172.16.22.132
Last login: Fri Jun 14 08:46:04 2019 from 192.168.34.16
3. その他の説明
3.1 他の方法での公開鍵ファイルの送信
scpコマンドを使用してAサーバーの公開鍵ファイルをBサーバーに送ることができます。
[root@localhost .ssh]# scp id_rsa.pub root@172.16.22.132:/root/.ssh
root@172.16.22.132's password:
id_rsa.pub 100% 390 0.4KB/s 00:00
3.2 ファイルの権限
.sshディレクトリおよび内部の公開鍵、秘密鍵ファイルに対して、現在のユーザーは少なくとも実行権限を持つ必要があります。他のユーザーは最大でも実行権限しか持つべきではありません。
chmod 600 ~/.ssh/authorized_keys ~/.ssh/id_rsa ~/.ssh/id_rsa.pub
3.3 ファイルの編集と表示
Linux環境では、vimなどのエディタを使用せず、cat、more、lessなどのコマンドを使用してファイル内容を表示することをお勧めします。
4. よくある問題と解決方法
(1) 問題:
[root@localhost ~]# ssh root@172.16.22.131
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/root/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /root/.ssh/id_rsa
root@172.16.22.131's password:
(2) 原因:
プライベートキーのファイル権限が0644であり、他のユーザーがアクセスできるため、キーが無視されます。
(3) 解決方法:
chmod 600 /root/.ssh/id_rsa