それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

秘密鍵・公開鍵でPuttyからSSHする方法。

新規ユーザー追加するときに鍵の作り方を忘れていたのでまとめなおした。鍵なんて一回作ったらずっと使い回しだから、やり方とかメモしてないと忘れちゃうよね。

SSH公開鍵生成して使う。

手順は次の通り

  1. サーバーで秘密鍵・秘密鍵を作る。
  2. 公開鍵をサーバーの認証済みキーに登録する。
  3. ログインのテスト。
  4. Windowsに鍵を転送。
  5. PuttyのKeygenでPutty形式変換。
    1. poderosaの場合もPuttyのKeygen
  6. Puttyで鍵を指定する。
サーバー側での手順
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 #ログインを許可する公開鍵保存先
`-- known_hosts #接続先SSHサーバーの固有ID
Windowsでの操作

全てのプログラム→Putty→PuTTYgenを起動

Loadで鍵を読み込んで、Putty秘密鍵形式で保存する

Puttyのセッション設定で鍵を指定してログインする。

poderosaSSH鍵を使う方法

PuttyGenで

変換(conversion)->ssh.com 形式へエクスポート

エラーの場合。

エラー秘密鍵・公開鍵でログインできない。

サーバー側でチェックする。

localhosにログインできるかチェックしてみる。
ローカルホストにログインできない。

パスワードを聞かれるとアウト
debian00:~# ssh localhost
root@localhost's password:   #rootパスワードを聞かれている。鍵ログインしてない。

秘密鍵のパスワードを聞かれる場合と、ログインパスワードを聞かれる場合は意味が違う。

debian00:~# ssh localhost
Enter passphrase for key '/root/.ssh/id_rsa': # 鍵を読み出すためのパスワード
サーバー側で調べられること
  1. authorized_keysに公開鍵が登録されているかチェック
  2. 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が鍵認証されないとき、パーミッションを疑え

その他の情報。

パスフレーズを毎回入力するのが面倒
  1. パスフレーズなし公開鍵を使う
  2. ssh-agentを使う。

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に追記する。

鍵を作り直す

鍵を無効にして消して作り直すときは.sshディレクトリ毎消す。

rm -r ~/.ssh/

別の鍵を指定してSSHログイン

takuya@localhost:~$ ssh root@192.168.10.11 -i path/to/key/file/id_rsa

最初は戸惑うかもしれないが、使い方によってはパスワード認証よりずいぶんマシなのでどんどん使いたい。