Linux
SSH
OpenSSH
sftp
ssh公開鍵認証

sftpのみ使用するユーザーで鍵認証を使用する

環境

クライアント側

  • OS: Windows 10 Pro
  • SSHクライアント: Putty
  • SSH鍵作成ソフトウェア: PuttyGen
  • SFTPクライアント: WinSCP

※Pageantは未使用

サーバー側

  • OS: Raspbian(Debian)
  • SSHサーバー: OpenSSH

sftpサーバーの環境を作る

今回は以下の投稿を参考にして構築した。ここでの投稿での説明は割愛する。

SFTPサーバを用意する - Qiita (usutaniさんの投稿)

https://qiita.com/usutani/items/fdabef73b5dff60c95c6

鍵を作る

クライアント側でPuttyGenで鍵を作成する。鍵の長さは任意に設定しても問題はない。
"Generate"ボタンをクリックし、ウィンドウ内(Keyエリア内)でマウスをゲージが満タンになるまで動かし続ける。満タンになりしばらくすると鍵が作成される。
作成した鍵にコメントを設定した方が良い。任意であるがパスフレーズの設定も行える。セキュリティを高めたい場合は推奨する。
作成したら"Save private key"で保存する。"Public key for pasting into OpenSSH authorized_keys file:"内にある"ssh-rsa ..."をクリップボードにコピーする(メモに控える)。

鍵を許可する

サーバー側でsftpのみ接続するユーザーの".ssh/authorized_keys"のファイルを開く。
控えた公開鍵を追記する。(もし他の鍵がある場合は改行して追記すること)
保存したらファイルは閉じる。

sshd_configの設定

先程の「sftpサーバーの環境を作る」というセクションの追記となる。

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp

これだけだと公開鍵を見つけることができず、認証エラーとなってしまうからだ。その原因はsudo usermod -d / sftp-userのコマンドでホームディレクトリが変更されているからだ。なので、デフォルトであるAuthorizedKeysFile %h/.ssh/authorized_keysの設定が効かないのである。その原因を解決するために以下の設定項目を追記する。

  AuthorizedKeysFile /home/%u/.ssh/authorized_keys

これにより設定はこうなるはずだ。

Match group sftponly
  ChrootDirectory /home/%u
  X11Forwarding no
  AllowTcpForwarding no
  ForceCommand internal-sftp
  AuthorizedKeysFile /home/%u/.ssh/authorized_keys

保存したらSSHサーバーの再起動を忘れずに。

接続テストをする

設定が終わったら接続テストを行う。
高度なサイトの設定ウィンドウでSSH > 認証のセクションに移動する。
認証条件のエリアで秘密鍵を参照し、OKをクリックする。
ログインをクリックする。パスフレーズ設定をしている場合はパスフレーズを入力する。認証できればアクセスができる。

トラブルシューティング

設定がうまくいかなかった場合は以下の内容を見直すと良い。

  • ユーザーは設定したグループに入っているか。
  • .ssh/authorized_keysの権限設定がおかしくないか。
  • SSHサーバーが起動していない。(設定が不適切で起動できていないのが主な原因と思われる)
  • .ssh/authorized_keysのファイル名があるか(スペルミスなどでよくある)

補足

sftpユーザーのルートディレクトリは権限の都合上設置することができない。そのため別途フォルダを作成し、所有権をsftpユーザーに設定しなければならない。

参考文献

  • SFTPサーバを用意する - Qiita (usutaniさんの投稿)

https://qiita.com/usutani/items/fdabef73b5dff60c95c6

  • chrootされたsftp専用ユーザを作る - Qiita (kawazさんの投稿)

https://qiita.com/kawaz/items/53d1c837dd762337eb3b