SSH入門|安全にリモート接続する鍵認証の基本

SSH入門|安全にリモート接続する鍵認証の基本

レンタルサーバーやVPSを借りたとき、最初の関門が「どうやって中に入るか」です。

その入り口になるのが SSH というコマンド。

ブラウザを介さず、手元のターミナルからリモートのマシンへ直接ログインできる仕組みですね。

この記事では、私が新しいサーバーを触るときに毎回踏む手順を、パスワードではなく鍵で安全につなぐところまでコピペ前提でまとめました。

SSHの基本形

まずは一番シンプルな形から。

ssh user@203.0.113.10

「どのユーザーで」「どのホストへ」の2つを @ でつないで渡すだけです。

ホスト名が引ける環境なら、IPアドレスの代わりに ssh deploy@example.com のようにも書けます。

初回接続では確認メッセージが出るので、yes と答えると接続先が known_hosts に記録される仕組みです。

パスワードより鍵認証が安全な理由

初期状態のSSHはパスワードでもログインできますが、私はほぼ使いません。

パスワード認証は総当たり攻撃に弱く、公開サーバーは四六時中ログインを試されているからです。

代わりに使うのが公開鍵認証で、手元に秘密鍵・サーバーに公開鍵を置いて照合させます。

秘密鍵さえ漏らさなければ、パスワードを盗み見られてもログインは通りません。

鍵のペアは ssh-keygen で作ります。

ssh-keygen -t ed25519 -C "you@example.com"

-t ed25519 は鍵の種類で、いま新しく作るなら短くて速いこの方式が無難でしょう。

-C はコメント欄なので、どのマシンで作った鍵かを後から見分ける覚え書きにしておくと便利です。

実行するとパスフレーズを聞かれるため、秘密鍵自体にもうひと鍵かけておくと安心。

公開鍵をサーバーに登録する

作った公開鍵をサーバー側へ渡せば、次からは鍵でログインできます。

ssh-copy-id user@203.0.113.10

このコマンドが、公開鍵をサーバーの ~/.ssh/authorized_keys へ安全に追記してくれます。

ssh-copy-id が無い環境なら、公開鍵ファイル(末尾が .pub)の中身を同じファイルへ手で貼っても結果は同じです。

ここまで済むと、以降はパスワードを打たずにログインが通るようになります。

~/.ssh/config で接続を短くする

接続先が増えてくると、毎回ユーザー名やポートを打つのはさすがに面倒でしょう。

そこで手元の ~/.ssh/config に接続先を登録しておくと、名前だけでつなげます。

Host myserver
    HostName 203.0.113.10
    User deploy
    Port 22
    IdentityFile ~/.ssh/id_ed25519

こう書いておけば、あとは ssh myserver だけで接続先・ユーザー・鍵をまとめて指定できるのが便利なところです。

接続先が3つを超えたあたりから、この config の恩恵が一気に効いてくる。

よくあるつまずき

最初にハマりやすいのが、秘密鍵の権限です。

秘密鍵が他人からも読める状態だと、SSHは安全のためにその鍵を拒否します。

chmod 600 ~/.ssh/id_ed25519

「WARNING: UNPROTECTED PRIVATE KEY FILE!」と怒られたら、まずこの権限を疑うと早いです。

もう一つは、サーバーを作り直したときに出る鍵の警告。

接続先のホスト鍵が変わると known_hosts の記録と食い違い、なりすまし警告が表示されます。

身に覚えのある作り直しなら、古い記録を消してからつなぎ直せばよいだけです。

ssh-keygen -R 203.0.113.10

最後に

SSHは「サーバーに入る」だけの入り口ですが、鍵認証まで整えておくと安全性と手数が同時に良くなります。

まずは ssh-keygen で鍵を1つ作り、ssh-copy-id で登録するところから試すと流れがつかめるはず。

サーバーに入った後の定番作業として、定期実行の cron もあわせて押さえておくと便利です。

crontabの書き方|5つのフィールドと3つの落とし穴を整理

より詳しい仕様は OpenSSH 公式マニュアル(ssh) にまとまっています。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA