個人的まとめ公開鍵認証編
#はじめに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