Linux入門:コマンド操作のきほん

リモート接続 SSH

生田 陸人
LuaGate エンジニア / 現役エンジニア
編集 LuaGate編集部

リモート接続 SSH とは

SSHを使って、リモートサーバーに安全に接続する方法をステップごとに解説します。本レッスンでは、リモート接続 SSH の基本から実際の使いどころまでを整理し、現場で迷わず使える形に落とし込みます。

SSH とは

SSH (Secure Shell) は、リモートホストに安全にログインしてシェル操作を行うためのプロトコルおよびツールです。クラウド上の VM、社内のサーバー、Raspberry Pi など、手元にない Linux マシンを操作する手段としてエンジニアの日常に深く根付いています。

通信路は暗号化されており、平文時代の telnetrsh を完全に置き換えた存在です。本コースの実行環境ではリモート接続を行うことができないので、本レッスンでは概念とコマンド構文を学び、ローカルで安全に試せる代替例を紹介します。

基本構文

ターミナル

ssh [オプション] ユーザー名@ホスト名

例えば本番サーバーに deploy ユーザーでログインしたいなら次のとおりです。

ターミナル

ssh deploy@example.com # パスワードを聞かれるか、SSH 鍵で認証して、リモートシェルが起動する

初回接続時はホスト鍵のフィンガープリントを確認するメッセージが出ます。yes と打つと ~/.ssh/known_hosts に記録され、以降は自動で照合されます。

よく使うオプション

オプション役割
-p ポートSSH ポートを指定 (デフォルト 22)
-i 秘密鍵使用する鍵ファイルを指定
-l ユーザーユーザー名を指定 (user@host の代わり)
-v詳細表示 (デバッグ用)
-Nリモートシェル不要 (トンネル専用)
-L / -Rポートフォワード

図解 SSH の認証フロー

diagram (will load when visible)

まずサーバーが「自分は本物だ」と証明するために ホスト鍵 を提示し、クライアントはそれを known_hosts と照合します。次にクライアントがユーザーとして認証し、暗号化チャネルが確立されます。

鍵認証 (推奨)

パスワード認証はブルートフォースに弱いため、本番では 公開鍵認証 を使うのが一般的です。

ターミナル

# 鍵ペアを作成 (Ed25519 推奨) ssh-keygen -t ed25519 -C "alice@example.com" # 既定で ~/.ssh/id_ed25519 (秘密鍵) と ~/.ssh/id_ed25519.pub (公開鍵) が作られる # 公開鍵をサーバーに登録 ssh-copy-id deploy@example.com # 以降はパスワードなしでログインできる ssh deploy@example.com

秘密鍵は絶対に外に出してはいけません。Git に間違ってコミットしてしまうのは典型的な事故で、見つけ次第パスフレーズ追加または再生成が必要です。

~/.ssh/config で接続を整理する

複数のサーバーに接続する場合は、~/.ssh/config でエイリアスを設定すると便利です。

プレーンテキスト

Host prod HostName prod.example.com User deploy Port 22 IdentityFile ~/.ssh/id_ed25519 Host bastion HostName bastion.example.com User alice

こう書いておくと ssh prod だけで接続できるようになります。ProxyJump bastion のように踏み台経由の設定も書けます。

チームで本番にアクセスするなら、各メンバーごとに鍵を分けてサーバー側の ~/.ssh/authorized_keys に列挙します。共有鍵を使い回すと、メンバー離脱時に鍵を全員分入れ替える必要が出てしまい運用が破綻します。

リモートでコマンドを実行する

対話シェルを開かず、コマンドだけ実行することも可能です。CI/CD や運用スクリプトで多用します。

ターミナル

ssh deploy@example.com 'sudo systemctl restart myapp' ssh deploy@example.com 'tail -100 /var/log/myapp.log'

ポートフォワード

手元から本番 DB を見たい、というときによく使います。

ターミナル

# ローカルの 5432 を bastion 経由でリモート DB の 5432 に転送 ssh -L 5432:db.internal:5432 alice@bastion.example.com

-L はローカルポートをリモートに転送、-R はその逆。-D で SOCKS プロキシも作れます。VPN を持っていない時の強い味方です。

環境制約とローカル代替

Cloud Functions や本コースの executor 環境ではリモート接続そのものができません。SSH の代わりに、ローカルでファイルを編集する練習なら次のように cp で代用できます。

ターミナル

# SSH の代わり 自分の端末内で別ディレクトリへコピー mkdir -p /tmp/remote_simulate cp /tmp/data.txt /tmp/remote_simulate/data.txt ls /tmp/remote_simulate/

手元の Linux / macOS / WSL 環境があるなら、ssh localhost で自分自身に接続して練習することもできます。

SSH は本番に手を入れる扉です。多くの障害はサーバーへの SSH 操作から始まります。-i で鍵を明示する、-v で挙動を見る、~/.ssh/config で整理する、の 3 つを身につけるだけで日常作業が格段に安定します。

まとめ

  • SSH は暗号化されたリモートシェル。telnet を完全に置き換えた
  • 認証は鍵認証が推奨。ssh-keygen + ssh-copy-id の流れを覚える
  • ~/.ssh/config でホスト別の設定を管理する
  • リモートで 1 行コマンドを実行することもできる
  • ポートフォワード -L で本番 DB を手元から覗ける
  • 本コースの executor ではリモート接続不可。ローカル cp で代用練習可

次のレッスン

次は scp でファイル転送 で、SSHを使って、リモートサーバーに安全に接続する方法をステップごとに解説します を学びます。

事前確認 — 進む前に次の 3 つができることを確認しましょう。

  1. ssh の要点を自分の言葉で説明できる
  2. このレッスンの最小コード (または操作手順) を見ずに書ける
  3. 練習問題やクイズで間違えた箇所を読み直して理解した

理解度チェック (30 秒)

Q. ssh とは何か、1 文で説明してください。

この章のポイント

A. 本文の「このレッスンで分かること」または冒頭の説明文を見直し、自分の言葉で要約できれば OK。詰まったら本レッスンの最初の H2 セクションを読み返してみましょう。

関連レッスン

参考リンク