公開鍵認証でサーバにログインする方法(サーバで鍵生成)
公開鍵認証でサーバにログインする方法(サーバで鍵生成)を紹介します。
ここではさくらインターネットを使い、サーバ上で鍵を生成し、「UTF-8 TeraTerm Pro with TTSSH2」でログインする手順で解説します。
1.サーバで公開鍵と秘密鍵を生成
まず「UTF-8 TeraTerm Pro with TTSSH2」で、通常のパスワードを使ったログインを行います。
次に公開鍵を保存するための.sshディレクトリをホームディレクトリに作成し、パーミッションを「700」にします。すでにディレクトリがある場合はパーミッションのみ確認し、必要に応じて変更してください。
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
「ssh-keygen」コマンドでSSH用の公開鍵と秘密鍵を生成します。
$ cd ~/.ssh
$ ssh-keygen -C コメント
コメントの部分は任意の文字列を設定します。「-C コメント」を省略しても大丈夫です。省略した場合、サーバに設定されているメールアドレスがコメントとして設定されます。
実行すると次のような画面が表示されます。対話式の部分は赤色で示した作業を行ってください。
$ ssh-keygen -C foo@hoge.com
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hoge/.ssh/id_rsa): ←リターン
Enter passphrase (empty for no passphrase): ←パスフレーズを入力
Enter same passphrase again: ←パスフレーズを再入力
Your identification has been saved in /home/hoge/.ssh/id_rsa.
Your public key has been saved in /home/hoge/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx foo@hoge.com
The key's randomart image is:
+--[ RSA 2048]----+
(略)
+-----------------+
これでssh-keygenを実行したディレクトリに、公開鍵の「id_rsa.pub」と秘密鍵の「id_rsa」が出来上がります。
2.公開鍵保存ファイルを作成
公開鍵「id_rsa.pub」を「authorized_keys」にリネームし、パーミッションを「600」に変更します。作業は前項と同じ、.sshディレクトリで実施してください。
$ mv id_rsa.pub authorized_keys
$ chmod 600 authorized_keys
「authorized_keys」には複数の公開鍵を保存できます。2つ目以降の鍵は次のように、catコマンドを使ってファイルの行末に追加してください。
$ cat id_rsa.pub >> authorized_keys
3.秘密鍵ファイルを作成
秘密鍵のid_rsaをlessコマンドで表示させます。
$ less id_rsa
表示された内容を、下のスクリーンショットのように丸ごとマウスコピーします(選択するだけでコピーされるのでCtrl+cなどの操作は不要)。実験したのはWindowsですが、文字コードはShift_JIS、改行コードはCR+LFで大丈夫です。
コピーした内容をローカルPC上のテキストエディタにペーストし、同じファイル名「id_rsa」で保存します。
注:ここではVPSの初期状態(FTPクライアントが使えない状態)を想定して説明していますが、FTPクライアントが利用可能であれば、ファイルをローカルPCにダウンロードしても大丈夫です。
4.公開鍵による認証でログイン
元の画面はそのままにして、「UTF-8 TeraTerm Pro with TTSSH2」でログインします。
ユーザー・パスフレーズ(ssh-keygenのときのパスフレーズ)を入力し、「RSA/DSA鍵を使う」を選択して、「秘密鍵」をクリックして、さきほど保存した秘密鍵を選択して「OK」をクリックします。
これでログインできれば成功です。
5.ファイルの削除
サーバ上に残った秘密鍵id_rsaは不要なので削除しておきましょう。
6.その他
公開鍵認証だけでサーバにログインできるように変更するには、root権限で/etc/ssh/sshd_configを編集し、sshdを再起動する必要がありますが、ここでは説明を割愛します。
- SSHポートフォワーディング(トンネリング)とは
- TeraTermで「unknown Encrypt algorithm(ctos)」というエラーになる場合の対処
- 公開鍵と秘密鍵の仕組みや違いについて分かりやすく説明してみた
- WinSCPを使って公開鍵認証でログインする方法(PuTTYgenで鍵生成)