SSH通信とは、「SSHプロトコル」と呼ばれる暗号化を利用して、クライアントとサーバー間の接続を保護します。この暗号化の利点は、「ユーザー認証」、「コマンドの入出力」、「ファイル転送」においてネットワーク内の攻撃から保護してくれるところです。この安全性を利用して、2拠点サーバー間通信のSSH接続をパスワードなしで相互接続する方法をここで解説します。
SSHプロトコルとは
SSH通信は「SSHプロトコル」と呼ばれる暗号化を利用して、クライアントとサーバー間の接続を保護します。
この暗号化により、「ユーザー認証」、「コマンドの入出力」、「ファイル転送」においてネットワーク内の攻撃から保護してくれます。
上記の暗号化にはクライアントとサーバー間に暗号化を解読するための鍵(SSHキー)を受け渡さないといけません。
以下SSHキーの作成とクライアントーユーザー間での鍵の交換について解説します。
2拠点サーバー間でのSSH通信
下記のように、イントラネット側にてサーバー機Aとサーバー機Bがありこの2拠点間でのSSH通信を試みます。
サーバー機Aからサーバー機BへのSSH暗号化通信接続
サーバー機A側
サーバーA機(プライベートIP=192.168.12.20)で、暗号化キー生成のために以下のコマンドを入力します。
$ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/user/.ssh/id_rsa.
Your public key has been saved in /home/user/.ssh/id_rsa.pub.
The key fingerprint is:
[ここにfingerprintが表示されます。]
自動的にユーザー(user)内の、~/.ssh/ ディレクトリに 「id_rsa」 (秘密鍵)と「 id_rsa.pub」 (公開鍵)が生成されていることがわかるかと思います。
次に、「 id_rsa.pub」 (公開鍵)を「authorized_keys」にコピーしてパミッションを600に変更します。
これは後に述べますが、今後サーバー機が増えた際にauthorized_keysに暗号化キーを集約させるためです。
$cat id_rsa.pub>> authorized_keys
$chmod 600 authorized_keys
次に生成さえれた暗号化鍵をサーバーB機(プライベートIP=192.168.12.20)に送ります。
■ssh接続したいクライアントサーバーB機側に公開鍵(public key)を覚えさせる。
$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@192.168.12.10:
usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/user/.ssh/id_rsa.pub"
/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
user@192.168.12.10's password:
サーバーB機の「ip address」=192.168.12.20のパスワードを入力し、
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'user@192.168.12.20'"
and check to make sure that only the key(s) you wanted were added.
と表示されれば成功です。
確認のために、サーバーB側へ移動後に、id_rsa.pubをauthorized_keys へコピーします。これはid_rsa.pubは生成ファイルですが、authorized_keysが後々、多くのキーを格納するファイルだからです。
authorized_keysの中身は以下のように複数のkeysが統合されています。
ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@192.168.12.20
ssh-rsa XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX user@192.168.12.10
以下のように行っても大丈夫です。
これによりクライアント機からパスワードなしでサーバー機にアクセスできるようになります。
サーバーBからサーバ-AへのSSH暗号化通信接続
上記の手続きをサーバーBからサーバーAへも暗号化キーを送りすれば2拠点間をパスワードなしで自由に行き来が出来ます。
そして、このキー交換のメリットとして
(1) SSH接続でユーザー名・パスワードがなくてもサーバー間の移動できる。
例えば、IPアドレス「192.168.12.10」のサーバーから
$ssh 192.168.12.20
とコマンド入力するだけでユーザー名とパスワードを省いてログイン・ログアウトが自由に出来てしまいます。
(2) SFTP接続でユーザー名・パスワードがなくてもファイルの移動できる。
といったメリットモあります。
サーバーとWindowsもしくはMacでのSSH接続
今まではLinux サーバー間のSSH接続に限って説明してきましたが、LinuxサーバーとWindowsクライアント間でもSSH接続が可能です。この件の詳細は以下の記事をご参照下さい。
まとめ
これら一連の動作をまとめると以下のようになります。
コメント