新規ユーザー追加するときに鍵の作り方を忘れていたのでまとめなおした。鍵なんて一回作ったらずっと使い回しだから、やり方とかメモしてないと忘れちゃうよね。
SSH公開鍵生成して使う。
手順は次の通り
サーバー側での手順
debian00:~# ssh-keygen -t rsa # 1. 鍵を作成 Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. 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/id_rsa.pub. The key fingerprint is: 3f:99:de:ab:c7:a4:fd:87:05:84:da:df:ce:f2:83:cf root@debian00 The key's randomart image is: +--[ RSA 2048]----+ # | . . | # 鍵生成に成功すると | . o + | # 左図のような | . o + | # | . . O | # 鍵に関するアスキーアートが表示される。 | o . S . | # | o * . . . | # | = o . . | # | . o.. | # | o+E | # +-----------------+ # debian00:~# cat .ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 2. 鍵をサーバーに登録 debian00:~# ssh localhost # 2. ログインをテスト The authenticity of host 'localhost (127.0.0.1)' can't be established. RSA key fingerprint is 08:cf:c1:88:8e:6f:***************** Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'localhost' (RSA) to the list of known hosts. debian00:~#
生成されるファイルは次の通り
takuya@debian00:~$ tree .ssh .ssh
-- id_rsa #秘密鍵 |
-- id_rsa.pub #公開鍵 |
-- authorized_keys #ログインを許可する公開鍵保存先 |
エラーの場合。
エラー秘密鍵・公開鍵でログインできない。
サーバー側でチェックする。
localhosにログインできるかチェックしてみる。
ローカルホストにログインできない。
パスワードを聞かれるとアウト
debian00:~# ssh localhost root@localhost's password: #rootパスワードを聞かれている。鍵ログインしてない。
秘密鍵のパスワードを聞かれる場合と、ログインパスワードを聞かれる場合は意味が違う。
debian00:~# ssh localhost Enter passphrase for key '/root/.ssh/id_rsa': # 鍵を読み出すためのパスワード
サーバー側で調べられること
- authorized_keysに公開鍵が登録されているかチェック
- SSHサーバーがauthorized_keysを参照しているかチェック
authorized_keysに公開鍵が登録されているかチェック
##二つの出力をよく見比べる。 debian00:~# cat .ssh/id_rsa.pub debian00:~# cat ~/.ssh/authorized_keys
SSHサーバーがauthorized_keysを参照しているかチェック
/etc/ssh/sshd_config
30 PubkeyAuthentication yes # 公開鍵で認証する。 31 AuthorizedKeysFile %h/.ssh/authorized_keys # ~/.ssh/authorized_keysを公開鍵ストアとして使う
それでもログインできない場合はパーミッションを疑え
デフォルトの鍵のパーミッションはこんな感じです。
takuya@debian00:~$ ls -lt .ssh 合計 44 -rw-r--r-- 1 takuya takuya 21216 2010-06-12 19:54 known_hosts -rw------- 1 takuya takuya 789 2010-05-01 16:02 authorized_keys -rw------- 1 takuya takuya 1675 2010-04-27 03:20 id_rsa -rw-r--r-- 1 takuya takuya 394 2010-04-27 03:20 id_rsa.pub
SSHは強力ツール。だからこそパーミッションも重要。鍵のパーミッションが間違っていると、書き換えられた可能性があるので、ログインを許可しません。
詳しくは過去のエントリを参照→SSHが鍵認証されないとき、パーミッションを疑え
その他の情報。
鍵パスフレーズを毎回入力するのが面倒
ssh-agentはパスフレーズ入力済みの秘密鍵を一時的に保管しておく用途に使えるソフト。
ssh-agent使い方 sshでパスワードなしにログインするには
eval `ssh-agent` ssh-add .ssh/id_rsa
鍵認証に失敗したらパスワード認証をする。
/etc/ssh/sshd_config
30 PubkeyAuthentication yes 31 AuthorizedKeysFile %h/.ssh/authorized_keys (略) 49 # Change to no to disable tunnelled clear text passwords 50 PasswordAuthentication yes #鍵認証のあとにパスワードYESを記述
外部からだけは鍵認証、ローカルからはパスワードを許可する。
/etc/ssh/sshd_config
#192.168.*.*からの接続だけパスワードで認証許可する 81 Match Address 192.168.*.* 82 PasswordAuthentication yes 83
他にも鍵認証を要請するユーザーや、SSHにパスワードログインを許可するグループなんて設定できる。
過去のエントリ参照。外からは公開鍵、内側だけはパスワード
他のサーバーに鍵を登録したい
ssh-keygenを実行したサーバーから行なうと簡単
takuya@localhost:~$ ssh-copy-id 192.168.10.1 # 192.168.10.1の /home/takuya/.sshへ takuya@localhost:~$ ssh-copy-id root@192.168.10.1 # 192.168.10.1のrootの鍵として登録
手作業で行なうときは id_rsa.pubを接続サーバーのauthorized_keysに追記する。