📌

ssh公開鍵認証時の設定

に公開

はじめに

たまにssh公開鍵認証を設定するのですが、ssh接続先マシンへの公開鍵を登録する方法を忘れます。
なので、備忘録用にメモしておきます。

ssh鍵作成

ssh鍵の作成は下記コマンで作成します。
オプションを指定しないとインタラクティブにファイルパスなどを聞かれますが、めんどくさいのでコマンドでやります。

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" -f ~/.ssh/id_test_rsa

[オプション]
-t:暗号アルゴリズム。デフォルトはrsaのようですが、現在はed25519が推奨のようです。
-b:作成する鍵のビット数。デフォルトは2048。
-C:コメント。オプションを使用しないバイアは、ssh-keygenを実施した環境がusername@hostnameの形式で記載されます。
-f:ファイルの指定。フルパスで指定します。

公開鍵の登録

ssh-copy-idコマンド

ssh-copu-idコマンドを使えばラクにローカルの公開鍵を対象サーバーへ登録できます。

ssh-copy-id -i ~/.ssh/id_test_rsa.pub username@your.server.ip

手動

ssh-copy-idコマンドが使えない環境では下記のように手動で設定できます。

cat ~/.ssh/id_test_rsa.pub | ssh username@your.server.ip \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && \
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"

接続の確認

-iオプションで作成した鍵を指定できます。

ssh -i ~/.ssh/id_test_rsa username@your.server.ip

その他

sshに関するディレクトリやファイルのパーミッション

もし、ssh接続する時にパーミッション関連のエラーが出る場合はディレクトリやファイルのパーミッションを確認してみてください。
[Linuxサーバー側]

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

[ローカル]

chmod 600 ~/.ssh/id_test_rsa

クライアント側のssh設定の簡略化

ssh接続先が多数ある場合は、毎回パラメータ指定するのがめんどくさいので、ローカルの./ssh/configに設定を記載しておくとラクです。

Host myserver-name1 another-server-name1
    HostName your.server.ip
    User username
    IdentityFile ~/.ssh/id_test_rsa
    Port 10022

Host:接続時に使用する名前。
HostName:接続先IP。FQDNなどを使う場合は名前解決できること。
User:ログインユーザー名。
IdentityFile:使用するssh秘密鍵のパス。
Port:ssh接続で使用するポート。(22以外の場合)

HostNameを複数指定したい場合は、行単位で追加して記載しているのですが、、、
もっと賢いやり方があればコメントいただけると嬉しいです。

参考

Discussion