SSHとは
SSH(Secure Shell)はクラアント/サーバーアーキテクチャーを使用する2つのシステム間でのセキュアな通信を容易にし、ユーザーがリモートでサーバーにログイン出来るようにするプロトコルです。
SSHはログインセッションを暗号化するため、侵入者が暗号化されていないパスワードを入手するための接続が難しくなります。
よく聞く「OpenSSH」とはこのSSHのプロトコルを実現するための有名なソフトウェアの一つです。
SSHのログイン認証方法
1. パスワード認証
ユーザ名とパスワードが分かれば誰にでもログインされてしまいます。
SSHの設定ファイルを変更して無効にするのが標準です。
2. 公開鍵認証による接続
事前にローカル側で作成した公開鍵を、ログイン先のサーバに登録することで、
登録された公開鍵に対応した秘密鍵を持っているクライアントのみが接続できます。
SSHの確認方法
リモートホストのポート番号の初期値は22番です。
# sshdが動いてることを確認
$ lsof -i:22
$ lsof | grep sshd
# Macの場合はssh-agent
$ lsof | grep ssh-agend
~/.ssh/known_hosts
一度接続したことのあるサーバのSSHサーバ証明書は、
クライアント側のホームディレクトリの中、~/.ssh/known_hosts
に格納されます。
known_hostsに記録されていないサーバに初めて接続する場合はコンソールに、
サーバの公開情報を出力します。
# known_hostsファイルの内容を表示
$ cat ~/.ssh/known_hosts
公開鍵認証について
鍵ペアの生成
SSHプロトコルのバージョン2用のRSA鍵ペアを生成します。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/john/.ssh/id_rsa):
Enterを押して、新規作成された鍵用のデフォルトの場所(~/.ssh/id_rsa)を確認します。
以下のようなメッセージが出力されます。
Your identification has been saved in /home/john/.ssh/id_rsa.
Your public key has been saved in /home/john/.ssh/id_rsa.pub.
The key fingerprint is:
e7:97:c7:e2:0e:f9:0e:fc:c4:d7:cb:e5:31:11:92:14 john@penguin.example.com
The key's randomart image is:
+--[ RSA 2048]----+
| E. |
| . . |
| o . |
| . .|
| S . . |
| + o o ..|
| * * +oo|
| O +..=|
| o* o.|
+-----------------+
~/.ssh/
ディレクトリのパーミッションを変更します。
$ chmod 700 ~/.ssh
クライアント側からサーバ側に公開鍵をコピー
$ scp ~/.ssh/id_rsa.pub remote-user-name@server-address:~
~/.ssh/authorized_keysファイルにコピーした公開鍵の内容を追加
# SSHログイン
$ ssh remote-user-name@server-address
# 公開鍵がコピーされていることを確認
$ cd ~ && cat id_rsa.pub
# 「.ssh」ディレクトリを作成・パーミッションを変更
$ mkdir ~/.ssh
$ chmod 700 .ssh
# 「~/.ssh/authorized_keys」を作成・パーミッションを変更
$ touch ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
# 公開鍵を「~/.ssh/authorized_keys」に追加
$ cat ~/id_rsa.pub >> .ssh/authorized_keys
ログインする
# パスワード認証ではなく公開鍵認証でログインできることを確認します
$ ssh remote-user-name@server-address
エラーが出なければ問題ないです。
OPENSSHこれを読んでさらに理解を深めて行きます。
参考記事
OpenSSH 7.7 がリリースされました
OpenSSH-7.3p1 日本語マニュアルページ
redhat openSSH