ネットワーク 初級

SSHの基礎と使い方

SSHを使ったリモートサーバーへの接続方法、鍵認証の設定、よく使うオプションを実践的に学ぶ

SSH(Secure Shell)はネットワーク越しに別のマシンへ安全に接続するためのプロトコルです。 パスワードや通信内容が暗号化されるため、リモートサーバーの操作に広く使われています。

基本的な接続

ssh コマンドの基本構文はシンプルです。

ssh ユーザー名@ホスト名

例えば example.comtaro というユーザーで接続するには:

ssh taro@example.com

ポートを指定する場合は -p オプションを使います(デフォルトは22番)。

ssh -p 2222 taro@example.com

鍵認証の設定

毎回パスワードを入力するのは手間がかかるうえ、セキュリティ上も鍵認証が推奨されます。

鍵ペアを生成する

ssh-keygen -t ed25519 -C "自分のメールアドレスなどコメント"

実行すると以下の2ファイルが ~/.ssh/ に作られます。

  • id_ed25519 — 秘密鍵(絶対に外部に漏らさない)
  • id_ed25519.pub — 公開鍵(サーバーに登録する)

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

ssh-copy-id -i ~/.ssh/id_ed25519.pub taro@example.com

または手動でサーバー側の ~/.ssh/authorized_keys に公開鍵の内容を追記します。

# サーバー側で実行
mkdir -p ~/.ssh
chmod 700 ~/.ssh
echo "公開鍵の内容" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

登録後の接続確認

ssh taro@example.com

パスワードなしで接続できれば成功です。

SSH設定ファイル(~/.ssh/config)

接続先ごとにオプションを毎回入力するのは面倒です。~/.ssh/config に設定を書いておくと短いエイリアスで接続できます。

Host myserver
    HostName example.com
    User taro
    Port 2222
    IdentityFile ~/.ssh/id_ed25519

設定後は以下のコマンドだけで接続できます。

ssh myserver

ファイルのパーミッションは 600 にしておく必要があります。

chmod 600 ~/.ssh/config

よく使うオプション

オプション説明
-p ポート接続ポートを指定
-i 鍵ファイル秘密鍵ファイルを指定
-L ローカル:リモートローカルポートフォワーディング
-Nリモートコマンドを実行しない(フォワーディング専用)
-v詳細なデバッグ出力(接続トラブル時に便利)

ファイルの転送(scp / rsync)

SSHを使ってファイルをコピーする方法も覚えておきましょう。

# ローカル → リモートにコピー
scp localfile.txt taro@example.com:/home/taro/

# リモート → ローカルにコピー
scp taro@example.com:/home/taro/remotefile.txt ./

# ディレクトリごとコピー(-r オプション)
scp -r mydir/ taro@example.com:/home/taro/

rsync を使うと差分だけを転送できるので効率的です。

rsync -avz mydir/ taro@example.com:/home/taro/mydir/

練習問題

以下の問いに答えてください。

問題1: example.com のポート 2222alice というユーザーで接続するコマンドを書いてください。

問題2: 鍵ペアを生成するコマンドのうち、アルゴリズムに ed25519 を指定するオプションはどれですか?

問題3: ~/.ssh/config に以下の設定を書いた場合、接続するコマンドはどう短縮できますか?

Host staging
    HostName 192.168.1.100
    User deploy
    IdentityFile ~/.ssh/deploy_key

問題4: ローカルの report.pdf をリモートサーバー example.com(ユーザー bob)の /tmp/ に転送するコマンドを書いてください。


答え

問題1の答え:

ssh -p 2222 alice@example.com

問題2の答え:

-t ed25519 オプションです。

ssh-keygen -t ed25519

問題3の答え:

ssh staging

設定ファイルに Host staging のエイリアスがあるため、これだけで deploy@192.168.1.100deploy_key を使って接続できます。

問題4の答え:

scp report.pdf bob@example.com:/tmp/