SSHは最初のハードルが高いところ。ここでは「とりあえずこれだけ押さえておけば動く」という4点に絞ってまとめる。
鍵の作り方
ssh-keygen -t ed25519 -C "わかりやすいコメント(例: 自分のメールアドレス)"
- 実行すると「秘密鍵」と「公開鍵」の2つのファイルができる
- 保存先を聞かれたら、特に理由がなければデフォルト(
~/.ssh/id_ed25519)のままEnterでよい - パスフレーズ(鍵専用のパスワード)はできれば設定する
鍵の強度についての基本的な考え方
| 種類 | 今どうか |
|---|---|
ed25519 |
現在の第一選択。鍵が短く、速く、十分に安全 |
rsa(4096bit以上) |
まだ使えるが、ed25519対応の相手なら基本不要 |
dsa |
古く非推奨。新規に作らない |
迷ったらed25519を選んでおけば間違いない。
パーミッション(ここでよく詰まる)
SSHは、権限(パーミッション)が緩すぎるファイルを見つけると、警告を出して接続を拒否することがある。権限の変更にはchmodを使う。
| 対象 | 権限 | コマンド |
|---|---|---|
~/.sshディレクトリ |
700(自分だけ読み書き実行可) |
chmod 700 ~/.ssh |
秘密鍵(id_ed25519など) |
600(自分だけ読み書き可) |
chmod 600 ~/.ssh/id_ed25519 |
公開鍵(.pub) |
644 |
chmod 644 ~/.ssh/id_ed25519.pub |
authorized_keys |
600 |
chmod 600 ~/.ssh/authorized_keys |
config |
600 |
chmod 600 ~/.ssh/config |
「鍵は合っているはずなのに繋がらない」と思ったら、まずここを疑う。
ファイルの置き場所
~/.sshは、ファイル管理アプリで普通に見ようとしても出てこない。名前が.(ドット)から始まるフォルダは「不可視フォルダ(隠しフォルダ)」として、通常は表示されない仕組みになっているためで、壊れているわけではない。
| 環境 | 見る方法 |
|---|---|
| Mac(ターミナル) | ls -a(-aを付けると隠しファイルも表示) |
| Mac(Finder) | Cmd + Shift + . |
| Windows(PowerShell) | Get-ChildItem -Force |
| Windows(エクスプローラー) | 「表示」タブ→「表示・非表示」→「隠しファイル」にチェック |
ここで混乱しやすいのが、同じ~/.sshでも「自分のパソコンの中」と「接続先サーバの中」の2か所あるという点。どちらの話をしているかを意識すると、ぐっと分かりやすくなる。
自分のパソコン側(接続する側)
| ファイル | 役割 |
|---|---|
~/.ssh/id_ed25519 |
自分の秘密鍵(人に渡さない) |
~/.ssh/id_ed25519.pub |
自分の公開鍵(接続先に渡す) |
~/.ssh/config |
よく繋ぐ先の接続設定をまとめておける(aliasという救世主と同じ「毎回書かなくていい」の発想) |
~/.ssh/known_hosts |
過去に接続したサーバの記録 |
接続先サーバ側(接続される側)
| ファイル | 役割 |
|---|---|
~/.ssh/authorized_keys |
そのサーバへのログインを許可する公開鍵の一覧 |
authorized_keysは接続先サーバの中にあるファイルで、自分のパソコンから持っていくものではない。すでにあるそのファイルに、自分の公開鍵の中身を1行書き足す(追記する)ことで「この鍵を持っている人はログインしてよい」と登録する、という仕組み。
公開鍵(.pub)の中身
1行のテキスト。これは人に渡していいファイル(メールで送る、authorized_keysに貼り付ける、どちらもOK)。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... わかりやすいコメント
秘密鍵の中身
複数行のテキスト。これは絶対に人に渡さない・どこにも貼り付けないファイル。名前に.pubが付いていない方が秘密鍵。
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAAB...(中略、複数行続く)
-----END OPENSSH PRIVATE KEY-----
公開鍵と秘密鍵は名前が似ているので、扱いを間違えないよう「.pubが付いている方だけ人に渡していい」と覚えておくとよい。
authorized_keysの中身
接続先サーバに置くファイル。自分の公開鍵の中身を1行まるごと貼り付ける、という形式(複数人に許可するなら1行ずつ追加)。
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... わかりやすいコメント
レンタルサーバーでは、管理画面から登録する
上は、サーバーの中にログインできる場合の話である。レンタルサーバーは、SSHそのものを管理画面から有効にする作りになっていることがあり、その場合SSHでログインできるようになる前にauthorized_keysを編集する方法が無い。鶏と卵になる。
そういうサービスは、管理画面に公開鍵を貼り付ける欄を用意している。貼り付けると、サービス側がauthorized_keysに書き足す。やっていることは同じで、書き足す作業をサービス側が代行しているだけ。
⚠️ その画面には「鍵ペアをサーバー側で生成する」という選択肢が並んでいることが多い。これはサーバーが秘密鍵を作って、それをダウンロードさせる方式で、手元でssh-keygenして公開鍵だけ渡す流れとは逆向きである。手元で作った鍵を使うなら、貼り付けるほうの欄を選ぶ。名前だけ見ると生成してくれるほうが楽に見えるので、ここで取り違えやすい。
configの中身
接続元(自分のパソコン)に置くファイル。よく繋ぐ先を、短い名前で呼べるようにしておける。
Host mymac
HostName 100.x.x.x
User onamae
IdentityFile ~/.ssh/id_ed25519
こう書いておけば、ssh mymacの一言で接続できる。長いホスト名やユーザー名を毎回打たなくてよくなる、configならではの恩恵。ここに書いた名前はmoshからもそのまま使える。
configだけで足りない場合(コマンド全体を短くしたい場合)はaliasという救世主と組み合わせる。
接続先が22番以外のポートを使っているとき
SSHは既定で22番のポート(通信の入口の番号)を使う。この番号を変えているサーバーがある。 22番には総当たりでパスワードを試す機械が集まるので、別の番号に変えているところがある。たとえばエックスサーバーは10022番である(公式マニュアルに記載)。
番号が合っていないと、鍵が正しくても接続できない。 Connection refused(接続を断られた)やOperation timed out(応答が無いまま時間切れ)で終わる。鍵の問題に見える表示ではないのに、鍵を疑って時間を使うことになりやすい。
configにPortの行を足す。
Host myserver
HostName example.xsrv.jp
User myaccount
Port 10022
IdentityFile ~/.ssh/id_ed25519
何番かは契約したサービスの案内に書いてある。推測で試さない。