SSH に関する超簡易メモ

imatomix
2020年2月18日 11:20
リモートワークも盛んな昨今、sshはもはや職種に限らず、働くためのインフラみたいなものなので、ちゃんと表面ぐらいは理解してみようかと思いました。

ssh の認証方法

パスワード認証方式

ユーザー名とパスワードでログインする方式。 これだとパスワードの強固さなどの管理設定は各ユーザーに依存し安全性に欠けるので、基本的には後述の公開鍵認証方式を使用する。
$ ssh [ユーザー名]@[ホスト] [ユーザー名]'s password: [パスワード]

公開鍵認証方式

サーバーとクライアントが持つ鍵を照らし合わせる認証方式。 秘密鍵と公開鍵のペアを作成し、ローカルに秘密鍵をログイン先のサーバーに公開鍵を登録することで、サーバーの公開鍵にマッチした秘密鍵をもったクライアントのみが接続できるようになる。パスワード認証方式よりも安全。
$ ssh [ユーザー名][ホスト名]

ssh-keygen

お馴染みssh鍵(秘密鍵と公開鍵)を生成するコマンド。 鍵には暗号化の異なる以下の種類があり、生成時に -t オプションで指定可能。

鍵の種類

rsa

  • 今現在一番よく使われているタイプ。
  • 1024bit以下の鍵は安全ではないらしく推奨されていない。
$ ssh-keygen -t rsa -b 1024
  • 2048bit は ssh-keygen のデフォルト値なため、このタイプが最もよく使われている。しかし最近では暗号強度が懸念され、今後推奨されなくなっていくらしい。
$ ssh-keygen -t rsa -b 2048
  • 4096bitならひとまず安心らしい。でも長い。
$ ssh-keygen -t rsa -b 4096

ecdsa

  • 楕円曲線暗号を使ったアルゴリズムで、RSAよりも短い鍵長で安全性を担保できるとのこと。
  • 昨今 rsa から ecdsa へ切り替える人が増えている。
  • 256bit
$ ssh-keygen -t ecdsa -b 256
  • 384bit
$ ssh-keygen -t ecdsa -b 348
  • 521bit
$ ssh-keygen -t ecdsa -b 521

ed25519

  • 難しいことはさておき、安全面と性能面で最強らしく、ecdsa よりもさらに署名生成/検証のパフォーマンスが良いとのこと。
  • ビット長は 256bit 固定。
$ ssh-keygen -t ed25519
  • にわかな僕は今後これを使っていこうと思う。

ssh-agent

ssh先のサーバーからまた別のサーバーやgithubに接続する時、毎回パスワード打つのは面倒。sshしたいからといって全サーバーに秘密鍵を置くのはセキュリティリスクになる。
そんな時のための ssh-agent。
ssh-agentに登録した鍵は、sshでログインした先でも使用可能になる。まさにエージェントで便利すぎ。

鍵の登録

  • ssh-keygenで生成した秘密鍵をssh-agentに登録する。
$ ssh-add -K [秘密鍵へのパス]

登録鍵の確認

  • 登録された鍵の一覧を確認する
$ ssh-add -l 256 SHA256:***ナンタラカンタラ***imatomi@imac.local (ED25519)

agentとsshログイン

  • ssh-agent を持って ssh するには -A オプションを使用する
$ ssh -A [ホスト]
  • ログイン先で ssh-add -l するとローカルのときと同じ鍵が表示される
$ ssh-add -l 256 SHA256:***ナンタラカンタラ***imatomi@imac.local (ED25519)
  • -A をつけずにsshした場合。何も表示されない。
$ ssh-add -l The agent has no identities.

~/.ssh/config

~/.ssh/config に、以下のように ForwardAgent yes を追加しておくと、ssh のときにわざわざ -A を指定しなくてもいい。
~/.ssh/config
Host github HostName github.com User git ForwardAgent yes // 追加する