SSH 入門:接続・鍵認証・config ファイルの設定

スポンサーリンク

ssh コマンドはネットワーク越しに別のサーバーへ安全に接続するツールです。通信が暗号化されているため、パスワードやコマンドが盗聴されません。

基本的な接続

ssh user@hostname

初回接続時はサーバーのフィンガープリント確認が出ます。yes と入力すると ~/.ssh/known_hosts に登録されて次回から表示されなくなります。

よく使うオプション

ポートを指定する(-p)

ssh -p 2222 user@example.com

秘密鍵を指定する(-i)

ssh -i ~/.ssh/id_ed25519_work user@example.com

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

ssh user@example.com "df -h"
ssh user@example.com "ls /var/log"

接続を詳細ログで確認する(-v)

ssh -v user@example.com

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

毎回ユーザー名・ホスト名・ポート・鍵を入力するのは面倒です。~/.ssh/config に設定しておくと短いエイリアスで接続できます。

Host myserver
  HostName example.com
  User hirono
  Port 2222
  IdentityFile ~/.ssh/id_ed25519_work

Host github.com
  HostName github.com
  User git
  IdentityFile ~/.ssh/id_ed25519_github

設定後は以下だけで接続できます。

ssh myserver

config ファイルのパーミッションが緩いと警告が出ます。

chmod 600 ~/.ssh/config

鍵認証の仕組み

パスワード認証より鍵認証が推奨されます。

  1. ssh-keygen で公開鍵・秘密鍵のペアを生成する
  2. 公開鍵をサーバーの ~/.ssh/authorized_keys に登録する
  3. 接続時にサーバーが公開鍵で検証し、秘密鍵で応答する

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

ssh-copy-id user@example.com

手動で追加する場合は:

cat ~/.ssh/id_ed25519.pub | ssh user@example.com "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

ssh-agent:パスフレーズを毎回入力しない

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

macOSではKeychainに保存して永続化できます。

ssh-add --apple-use-keychain ~/.ssh/id_ed25519

~/.ssh/config に以下を追加しておくと自動で読み込まれます。

Host *
  UseKeychain yes
  AddKeysToAgent yes

ポートフォワーディング

リモートサーバー上のポートをローカルに転送できます。

# ローカルの 13306 番 → リモートの MySQL (3306) に転送
ssh -L 13306:localhost:3306 user@example.com

接続後、ローカルから以下でMySQLに繋がります。

mysql -h 127.0.0.1 -P 13306 -u root -p

まとめ

# 基本的な接続
ssh user@example.com

# ポート・鍵を指定
ssh -p 2222 -i ~/.ssh/id_ed25519_work user@example.com

# config に登録して短縮
ssh myserver

# 公開鍵をサーバーに登録
ssh-copy-id user@example.com

# リモートでコマンドを実行
ssh user@example.com "df -h"

SSHキーの生成方法は「ssh-keygen 入門:SSHキーペアの生成・確認・管理」を参照してください。