Windows+VirtualBox+CentOSの仮想環境に外部から公開鍵ログインできるようにする上でハマったこと

はじめに

VirtualBoxでローカルに環境を構築してゴニョゴニョやっていたのを、
外部マシン(同一ネットワーク)からSSHの公開鍵(パスなし)で接続したくなりました。

その設定でハマったので解決策を共有します。

環境

  • Host : Windows 10
  • VM : VirtualBox
    • Hostの500番PortをGuestの22番Portにポートフォワーディング
  • Guest : CentOS 7

結論 : authorized_keysの所有者設定がrootになっていた

私の場合はこれでした。

「SSH接続のハマりどころは権限設定だぞ」と、読み書き権限については気を付けていましたが、
ownerがログインユーザー名ではなかったのをキレイに見落としておりました。

そりゃあ

$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

を何回やっても効かないわけですね。

Webサーバも立てず、完全にローカルのみで動かしていたので、
~/.ssh/authorized_keysを、一体いつrootで作ったかも定かではないですが、
「SSH接続では権限設定(所有者権限含む)に気を配るべし」という教訓を得ました。

以下は簡単な手順です。必要に応じてsudoしてください。

手順

  1. 接続元のマシンで鍵ペアを作成する
    • ssh-keygen
    • パスフレーズは特に設定しない
  2. 1で作成した公開鍵を、接続先Guestの~/.ssh/authorized_keysに追記
    • 接続先で $ vi ~/.ssh/authorized_keys してペースト
  3. 接続先Guestでsshd_configを編集
    • $ vi ~/etc/config/sshd_config
    • PasswordAuthentication yesPasswordAuthentication no に変更
      • パスワード認証ログインを禁止
    • 構文チェック
      $ ssh -t
    • sshd再起動
      $ service ssh restart
  4. 接続元のマシンから秘密鍵でSSHログインできることを確認
    • $ ssh -p 500 [username]@[ip address] -i [秘密鍵のパス]

小ネタ : -vオプションで詳細出力

ssh接続時に -vオプションをつけることで詳細なログを見ることができます。
デバッグに便利でした。

まとめ

SSH接続設定のときは所有者も含む権限設定に気を配りましょう。

参考