リモート操作が必須となった現代、MacでのSSHの使い方をしっかり押さえておくと作業効率と安全性が大きく向上します。初心者向けの基礎から実務で役立つ運用上の注意点、鍵ベース認証やscpによるファイル転送、接続の自動化まで網羅します。
重要: 画像はMacのTerminalでsshコマンドを実行している画面の例です。
基本概念(1行定義)
- SSH: ネットワーク上で安全に端末やサーバに接続するための暗号化プロトコル。
- 鍵認証: 公開鍵と秘密鍵を使ってパスワードなしで安全にログインする仕組み。
目次
- Terminalを開く
- SSH接続を開始する
- 鍵認証の生成と登録
- SSH設定ファイルで接続を簡略化
- ファイル転送(scp/sftp)
- 接続管理と便利コマンド
- 切断方法
- トラブルシューティング
- セキュリティ強化チェックリスト
- 役割別チェックリスト
- 受け入れテスト(接続確認)
- 1行用語集
- 要点まとめ
Terminalを開く
MacでSSHを使うにはまずTerminalを開きます。方法は主に2つです。
- Spotlightを使う: Command + Space を押し、「Terminal」と入力してEnter。
- Finderを使う: アプリケーション > ユーティリティ > Terminal をダブルクリック。
メモ: macOSのバージョンによっては「システム環境設定」や「システム設定」という表記が異なりますが、Terminalアプリは変わりません。
SSH接続を開始する
リモートサーバのIPアドレスまたはホスト名とログインユーザーを確認します。Terminalで以下のコマンドを実行して接続します。
ssh username@ip-address-or-hostname
- username をリモートサーバ上のアカウント名に置き換えます。
- ip-address-or-hostname を実際のIPまたはドメイン名に置き換えます。
初回接続時はサーバの公開鍵フィンガープリントを受け入れるか尋ねられます。表示された指紋が正しいことを確認して “yes” を入力してください。続けてパスワード入力を求められます(入力中は非表示です)。
重要: パスワード認証を使う場合は強力なパスワードを設定してください。可能なら鍵認証へ移行することを推奨します。
鍵認証の生成と登録
パスワードの代わりにSSH鍵を使うと安全で便利です。推奨はed25519鍵ですが、互換性を考えるとRSA 3072/4096もあり得ます。
- 鍵ペアの生成(ローカルMacで実行)
ssh-keygen -t ed25519 -C "[email protected]"
- 生成中にファイル名(デフォルトは ~/.ssh/id_ed25519)とパスフレーズを尋ねられます。パスフレーズを設定すると鍵紛失時のリスクを低減できます。
- 公開鍵をリモートサーバへ登録する(パスワード認証が利用可能な場合)
- 自動ツールがある環境では ssh-copy-id が使えます(Homebrewで入手可能)。
ssh-copy-id -i ~/.ssh/id_ed25519.pub username@ip-address
- 自動ツールが無い場合は、以下のコマンドで手動で追加します。
cat ~/.ssh/id_ed25519.pub | ssh username@ip-address "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
- 鍵をエージェントに登録(macOSのキーチェーン連携)
eval "$(ssh-agent -s)"
ssh-add -K ~/.ssh/id_ed25519
注: ssh-add の -K オプションはmacOSのキーチェーンと連携するための古くからの方法です。OpenSSHやmacOSのバージョンにより挙動が異なるため、man ssh-add
を確認してください。
SSH設定ファイルで接続を簡略化
複数サーバを使う場合、~/.ssh/config にエントリを作ると便利です。例:
Host myserver
HostName example.com
Port 2222
User deploy
IdentityFile ~/.ssh/id_ed25519
IdentitiesOnly yes
この設定を追加すると ssh myserver
だけで接続できます。
ファイル転送(scp と sftp)
- scp(Secure Copy)の基本例:
# ローカルからリモートへ
scp /path/to/local/file username@host:/path/to/remote/
# リモートからローカルへ
scp username@host:/path/to/remote/file /path/to/local/
- ディレクトリを再帰的にコピーするには -r を使います。
scp -r /local/dir username@host:/remote/dir
- sftp はインタラクティブにファイル操作を行いたい場合に便利です。
sftp username@host
sftp> put localfile
sftp> get remotefile
sftp> bye
代替: rsync は差分転送が必要な場面で優れています。ssh トンネルを使えばリモートと安全に同期できます。
接続管理と便利コマンド
- ポート指定:
ssh -p 2222 username@host
- 特定鍵を使う:
ssh -i ~/.ssh/id_rsa username@host
- 圧縮を有効にする:
ssh -C username@host
(低速回線で有効) - 転送ポート(ローカル/リモート):
ssh -L local_port:dest:dest_port
/ssh -R remote_port:dest:dest_port
- 代理転送:
ssh -A username@host
(慎重に使用)
便利: 接続時のログを増やしたいときは -v
(詳細)、さらに -vvv
でデバッグ出力を増やせます。
切断方法
- 通常の終了:
exit
を入力してEnter。 - キーボードショートカット: Control + D でもセッションが終了します。
- 接続がハングした場合: ローカル端末で
~.
(チルダ+ドット)で強制切断できます(先頭でないと動作しない場合があります)。
トラブルシューティング
よくある問題と対処法:
- 接続が拒否される(Connection refused): サーバ側でSSHサービスが起動しているか、ポートが正しいか、ファイアウォールで遮断されていないか確認します。
- タイムアウト: IP/ホスト名が正しいか、ネットワーク経路が有効か、VPNやプロキシの影響がないかを確認します。
- 鍵認証で弾かれる: パーミッションが厳密に必要です。~/.ssh ディレクトリは700、authorized_keys は600 に設定されているか確認します。
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
- known_hosts のフィンガープリントエラー: サーバ再構築後などにホストキーが変わると警告が出ます。
~/.ssh/known_hosts
を編集して該当行を削除するか、ssh-keygen -R hostname
を使って削除します。但し、攻撃の可能性もあるため安易に削除せず確認してください。
セキュリティ強化チェックリスト
- 鍵認証を優先し、可能ならパスワード認証を無効化する(sshd_config の PasswordAuthentication no)。
- root 直接ログインを禁止する(PermitRootLogin no)。
- 不要なユーザーを限定する(AllowUsers で許可するユーザーを絞る)。
- SSHのデフォルトポートを変更してブルートフォースのノイズを減らす(セキュリティの代替手段ではない)。
- サーバとクライアント両方を最新の状態に保つ。
- 公開鍵は慎重に管理し、不要になった公開鍵は authorized_keys から削除する。
- 監査ログを有効にし、不審な接続を検知したら対処する(Fail2Ban などの自動対策は検討事項)。
注意: ポート変更は攻撃を根本的に防ぐものではありません。防御の層(多要素認証、ネットワーク制限、ログ監視)を組み合わせてください。
役割別チェックリスト
システム管理者
- SSHポート、sshd_config の安全設定確認
- 鍵配布と撤去、ログ監査を定期実施
- 自動化(構成管理ツールでの一元管理)
開発者
- ~/.ssh/config で複数サーバの接続を簡略化
- 秘密鍵はローカルに安全に保管、パスフレーズ必須で管理
- 必要に応じてssh-agent/Keychainで利便性を確保
一般利用者/学習者
- 初回はパスワード認証で接続確認後、鍵認証に移行
- ファイル転送はscpかsftpを使用し、権限に注意
受け入れテスト(接続確認)
接続が成功したかを判定する簡単なテストケース:
ssh username@host
を実行して login プロンプトが出るか(または鍵でログインできるか)whoami
を実行し想定のユーザー名が返ることls
でホームディレクトリの一覧が見えること- scp を使って小さなファイルの送受信ができること
exit
で切断し、ローカルTerminalに戻ること
これらが満たされれば基本的な運用は可能です。
いつSSHがうまく行かないか(反例)
- ネットワークが分断されている場合(VPNや企業ネットワークのポリシーで制限されることがある)。
- サーバ側でsshデーモンが停止している、または設定が壊れている場合。復旧には管理者アクセスが必要です。
- 鍵の権限が誤っている、またはauthorized_keysに誤った値が入っていると鍵認証は失敗します。
小さな脳内モデル(覚え方)
- 鍵は「身分証明書」、authorized_keys は「入館者名簿」。名簿に名前がないと入れない。
- ~/.ssh/config は「頻繁に行くカフェの名札」。短縮名でサクッと行ける。
よく使うコマンド早見表
- 接続: ssh user@host
- 鍵作成: ssh-keygen -t ed25519
- 公開鍵転送(手動): cat id.pub | ssh user@host “mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys”
- scp: scp localfile user@host:/remote/path
- sftp: sftp user@host
- ssh設定ファイル: ~/.ssh/config を編集
1行用語集
- ssh: 安全なシェル接続
- scp: SSH経由のファイルコピー
- sftp: SSH経由のファイル転送インタラクティブツール
- authorized_keys: サーバ側に置く許可済み公開鍵リスト
要点まとめ
- SSHはMacのTerminalから簡単に使える強力で安全なリモート接続手段です。
- 鍵認証を使えばパスワードより安全で自動化に向いています。
- ~/.ssh/config や ssh-agent を使うと運用が楽になります。
- セキュリティ対策(鍵管理、sshdの設定、ログ監視)は必須です。
重要: 本記事の手順は一般的なガイドです。業務系のサーバや重要なインフラでは組織のセキュリティポリシーに従い、変更前に確認してください。