SSH
公開鍵認証

sshの公開鍵認証について(個人的まとめ)

More than 1 year has passed since last update.

個人的まとめ公開鍵認証編

はじめにsshとは

sshとはSecure Shellの略で暗号化や認証を用いて安全にリモートコンピュータと通信が出来るプロトコル。

telnetとsshの違い

telnetではIDやパスワードを含めたすべての通信が平文(暗号化されない)で送信されているのに対し、sshはIDやパスワードを含めたすべての通信が暗号化されて送信されています

暗号化の種類

  • 共通鍵認証
    • データの暗号化と復号化に同じ鍵を使う
    • もし誰かに鍵が渡ってしまうと復号して盗聴が可能
  • 公開鍵認証
    • 暗号化に公開鍵、復号化に秘密鍵を使う
    • データは受信者しか持たない秘密鍵を使って復号するので盗聴される可能性が低い

公開鍵認証

今回、クライアント(ログイン元)からサーバ(ログイン先)に通信するとする
どちらもlinux系OSを使用し、ターミナルを使っています(私の場合はクライアントはubuntu、サーバはdebianを使用しています)

公開鍵と秘密鍵を使用

  • 秘密鍵クライアント(ログイン元)
  • 公開鍵サーバ(ログイン先)

クライアント(ログイン元)の作業

事前に/home/name配下に.sshというディレクトリを作っておいてください

クライアント(ログイン元)
$ ssh-keygen -t rsa

RSA暗号方式の鍵を作成
-tで鍵の種類を選べます

  • rsa (RSA暗号方式)
  • dsa (DSA暗号方式)
クライアント(ログイン元)
Generating public/private rsa key pair.
Enter file in which to save the key (/home/name/.ssh/id_rsa):[enter]

鍵の名前を聞かれています
空だとid_rsaとid_rsa.pubが出来ます

クライアント(ログイン元)
Enter passphrase (empty for no passphrase):[パスフレーズ入力]
Enter same passphrase again:[同じパスフレーズ入力]

パスフレーズを聞かれています
空だとパスフレーズなしで作成出来ます

クライアント(ログイン元)
Your identification has been saved in /home/name/.ssh/id_rsa.
Your public key has been saved in /home/name/.ssh/id_rsa.pub.

これで/etc/name/.sshには

  • id_rsa.pub(公開鍵)
  • id_rsa(秘密鍵)

2つのファイルが出来ました

  • 秘密鍵はクライアント側(ログイン元) -> id_rsa
  • 公開鍵はサーバ側(ログイン先) -> id_rsa.pub

から考え、id_rsa.pub(公開鍵)をサーバ側に渡します

クライアント(ログイン元)
$ chmod 700 /home/name/.ssh

.sshの権限を700にしておきます

サーバ(ログイン先)の作業

こっちも事前に/home/name配下に.sshというディレクトリを作っておいてください

サーバ(ログイン先)
$ mv id_rsa.pub /home/name/.ssh

id_rsa.pub(公開鍵)を/home/name/.sshに移す

  • すでに.sshにauthorized_keysがある場合(追加していく)
    $ cat id_rsa.pub >> authorized_keys
  • .sshにauthorized_keysがない場合(新しく作る)
    $ mv id_rsa.pub authorized_keys

もうid_rsa.pub(公開鍵)は消してしまっても構いません

サーバ(ログイン先)
$ chmod 700 /home/name/.ssh
$ chmod 600 authorized_keys

.sshの権限を700に、
authorized_keysを600にします

接続する(ログイン元での操作)

クライアント(ログイン元)
$ ssh hoge@192.168.1.1 
Enter passphrase for key '/home/name/.ssh/id_rsa': [パスフレーズ]
Last login: Wed September 21 21:37:19 2016 from www.hoge.hoge

$ ssh [ユーザ名]@[IPアドレス(ドメイン名)] で接続することが出来ます

config

接続するごとに上記のコマンドを打つのは面倒で
ポート番号の指定(-p [ポート番号])
$ ssh hoge@192.168.1.1 -p 22
公開鍵の指定(-i [鍵の名前])
$ ssh hoge@192.168.1.1 -i /home/name/.ssh/hoge

など長くなるので
/home/name/.sshで

クライアント(ログイン元)
$ vim config
Host hoge.lab
    HostName aaa.bbb.ccc
    User hoge
    Port 20
    IdentityFile /home/name/.ssh/hoge

Host 任意の接続名
HostName ホスト名
User ユーザー名
Port ポート番号
IdentityFile 鍵へのパス

これらを設定すると

クライアント(ログイン元)
$ ssh hoge.lab

で接続できるようになります

鍵を複数作る場合

クライアント(ログイン元)
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/name/.ssh/id_rsa):hoge

鍵に名前(hoge)を付けてあげると

  • hoge(秘密鍵)
  • hoge.pub(公開鍵)

が出来ます
デフォルトでid_rsaになるので、鍵の名前を設定することによって鍵の上書きを防ぎます

よくあるエラー

クライアント(ログイン元)
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0640 for '/home/name/.ssh/id_rsa' are too open.
It is recommended that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /home/name/.ssh/id_rsa
Permission denied (publickey,gssapi-with-mic).

id_rsa(秘密鍵)がopenしすぎている
他の人に秘密鍵にアクセスされないように推奨している

ということでid_rsa(秘密鍵)の権限を600にすると直ります

クライアント(ログイン元)
$ chmod 600 id_rsa