リモートワークも盛んな昨今、sshはもはや職種に限らず、働くためのインフラみたいなものなので、ちゃんと表面ぐらいは理解してみようかと思いました。
ssh の認証方法
パスワード認証方式
ユーザー名とパスワードでログインする方式。
これだとパスワードの強固さなどの管理設定は各ユーザーに依存し安全性に欠けるので、基本的には後述の公開鍵認証方式を使用する。
$ ssh [ユーザー名]@[ホスト]
[ユーザー名]'s password: [パスワード]
公開鍵認証方式
サーバーとクライアントが持つ鍵を照らし合わせる認証方式。
秘密鍵と公開鍵のペアを作成し、ローカルに秘密鍵をログイン先のサーバーに公開鍵を登録することで、サーバーの公開鍵にマッチした秘密鍵をもったクライアントのみが接続できるようになる。パスワード認証方式よりも安全。
$ ssh [ユーザー名]@[ホスト名]
ssh-keygen
お馴染みssh鍵(秘密鍵と公開鍵)を生成するコマンド。
鍵には暗号化の異なる以下の種類があり、生成時に -t オプションで指定可能。
鍵の種類
rsa
$ ssh-keygen -t rsa -b 1024
$ ssh-keygen -t rsa -b 2048
$ ssh-keygen -t rsa -b 4096
ecdsa
$ ssh-keygen -t ecdsa -b 256
$ ssh-keygen -t ecdsa -b 348
$ ssh-keygen -t ecdsa -b 521
ed25519
$ ssh-keygen -t ed25519
ssh-agent
ssh先のサーバーからまた別のサーバーやgithubに接続する時、毎回パスワード打つのは面倒。sshしたいからといって全サーバーに秘密鍵を置くのはセキュリティリスクになる。
ssh-agentに登録した鍵は、sshでログインした先でも使用可能になる。まさにエージェントで便利すぎ。
鍵の登録
$ ssh-add -K [秘密鍵へのパス]
登録鍵の確認
$ ssh-add -l
256 SHA256:***ナンタラカンタラ***imatomi@imac.local (ED25519)
agentとsshログイン
$ ssh -A [ホスト]
$ ssh-add -l
256 SHA256:***ナンタラカンタラ***imatomi@imac.local (ED25519)
$ ssh-add -l
The agent has no identities.
~/.ssh/config
~/.ssh/config に、以下のように ForwardAgent yes を追加しておくと、ssh のときにわざわざ -A を指定しなくてもいい。
~/.ssh/configHost github
HostName github.com
User git
ForwardAgent yes // 追加する