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
鍵認証の仕組み
パスワード認証より鍵認証が推奨されます。
ssh-keygenで公開鍵・秘密鍵のペアを生成する- 公開鍵をサーバーの
~/.ssh/authorized_keysに登録する - 接続時にサーバーが公開鍵で検証し、秘密鍵で応答する
公開鍵をサーバーに登録する
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キーペアの生成・確認・管理」を参照してください。