ぶろぐ

日記です

公開鍵認証でssh自動ログイン


便利らしいけどこの辺よく抑えていなかったので調べてみました。実はコマンド2つでいけるので余裕(`・ω・´)

手順

秘密鍵と公開鍵を作る
ssh-keygen -N "" -t rsa

※ここで-N "passphrase"などパスフレーズを入れると、ログインのたびにパスフレーズを問われてしまう(めんどい)

②公開鍵を接続先に登録する
ssh-copy-id hoge@server.local
③確認

パスフレーズの入力なしにログインできることを確認

ssh hoge@server.local

お、結構簡単。

ポイント

  • sshログインする人が秘密鍵を持っていること
  • sshログインする先に公開鍵を教えていること
  • 自分が持っている秘密鍵と、相手に教えている公開鍵がセットになっていること。

よくありそうな質問

公開鍵なくしちゃった!

秘密鍵から、以下のコマンドで作成可能。
再度秘密鍵を作ると、サーバー毎に秘密鍵を切り替えないといけないので手間ですよね。

# 秘密鍵から公開鍵を作る
ssh-keygen -y -f id_rsa > id_rsa.pub
ログインするサーバー毎に秘密鍵と公開鍵を作らないといけないの?

秘密鍵は使いまわせる。クライアントAがサーバーA,B,C,Dに公開鍵を登録すればいい。具体的なコマンドは以下。

#!/bin/sh

# 秘密鍵が無かったら作る
if [ ! -e ~/.ssh/id_rsa ] ; then ssh-keygen -N "" -t rsa -f ~/.ssh/id_rsa; fi
# 公開鍵が無かったら作る
if [ ! -e ~/.ssh/id_rsa.pub ] ; then ssh-keygen -y -f id_rsa > id_rsa.pub ; fi
# 各サーバーに公開鍵を登録
ssh-copy-id myname@server-A
ssh-copy-id myname@server-B
ssh-copy-id myname@server-C
ssh-copy-id myname@server-D

githubに登録する公開鍵も、hogeサーバー登録する公開鍵も同じでおk。

~/.ssh/config

ホスト名が長いときだるい。

Host server-A
        Hostname hogehoge.japan.tokyo.foo.server-a.local
        User user
        Port 1234

~/.ssh/configに設定を入れると楽になる。

  • ssh -luser -p1234 hogehoge.japan.tokyo.foo.server-a.local

とかやってたのが

で入れるようになる。
ここまでやれば結構楽になり、サーバーにログインするのが少し楽しくなる。

追記

Macssh-copy-idコマンドなかった><
以下代用コマンド。

pub_key=$(cat ~/.ssh/id_rsa.pub); ssh hoge@hoge.local "echo $pub_key >> ~/.ssh/authorized_keys"