SSH

SSHとは

SSH(Secure Shell)は、ネットワーク越しに別のコンピュータを安全に操作するためのプロトコルです。クラウド上の [[Linux]] サーバーにログインして [[シェルとコマンドライン]] で作業する — この開発・運用の基本動作は、ほぼすべて SSH の上で行われています。標準ポートは 22番 です。

通信はすべて暗号化されるため、途中の経路で盗聴されてもコマンドやパスワードは読み取れません([[暗号化の基礎]])。

公開鍵認証 — パスワードより安全なログイン

SSH のログインには2つの方式があります。

パスワード認証公開鍵認証
仕組みパスワードを送って照合秘密鍵と公開鍵のペアで本人確認
総当たり攻撃弱い(推測できる)事実上不可能
実務での扱い無効化するのが定石標準。こちらを使う

公開鍵認証では、手元に秘密鍵(絶対に他人に渡さない)、サーバーに公開鍵(渡してよい)を置きます。GitHub に公開鍵を登録して git push するのも、まさにこの仕組みです([[Git]])。

手元のPC(秘密鍵)                サーバー(公開鍵を登録済み)
   │  「この公開鍵の持ち主だと証明して」  │
   │ ←──────────────────────────────── │
   │  秘密鍵で署名を作って返す           │
   │ ────────────────────────────────→ │
   │        公開鍵で署名を検証 → ログイン成功

SSHでできること(リモートログイン以外)

  • SFTP / scp — 暗号化されたファイル転送。素の [[FTP]] の実質的な後継
  • ポートフォワーディング — SSH の暗号化トンネルに別の通信を通す(踏み台サーバー経由の DB 接続など)
  • Git のリモート接続git@github.com:... 形式の URL は SSH 接続

1本の仕組みの上に転送・トンネル・バージョン管理が乗っている、応用範囲の広い土台技術です。

初学者向けポイント

  • 秘密鍵は「家の鍵」そのもの。リポジトリにコミットしない・チャットで送らない
  • サーバー運用では「パスワード認証を無効化して公開鍵認証のみ」「rootログイン禁止」が定石
  • 22番ポートは攻撃の的になりやすく、[[ファイアウォール]] で接続元を絞るのが基本
  • Windows からのGUI付きリモート操作には [[RDP(リモートデスクトップ)]] という別の選択肢がある(SSH はコマンドライン操作向き)

関連技術とのつながり

  • [[Linux]] / [[シェルとコマンドライン]] — SSH ログイン後に操作する世界そのもの
  • [[暗号化の基礎]] — 公開鍵暗号と署名が SSH の心臓部
  • [[Git]] — GitHub への push/pull の標準的な接続手段
  • [[FTP]] — SFTP は SSH によるファイル転送(FTP の後継)
  • [[ファイアウォール]] — ポート22の防御は運用の基本
Q: SSHの公開鍵認証で、絶対に他人に渡してはいけないのはどれ?
- [ ] 公開鍵
- [x] 秘密鍵
- [ ] サーバーのIPアドレス
解説: 秘密鍵が本人であることの証明そのものです。公開鍵は名前のとおり公開してよい鍵です。

Q: SSHの標準ポート番号はどれ?
- [ ] 21
- [x] 22
- [ ] 443
解説: SSH は22番が標準です(21はFTP、443はHTTPS)。

Q: SSHの仕組みを使った暗号化ファイル転送はどれ?
- [x] SFTP
- [ ] SMTP
- [ ] FTPS
解説: SFTP は SSH のトンネル上でファイル転送を行います(FTPS は FTP+TLS で別物)。