環境
クライアント側
- OS: Windows 10 Pro
- SSHクライアント: Putty
- SSH鍵作成ソフトウェア: PuttyGen
- SFTPクライアント: WinSCP
※Pageantは未使用
サーバー側
- OS: Raspbian(Debian)
- SSHサーバー: OpenSSH
sftpサーバーの環境を作る
今回は以下の投稿を参考にして構築した。ここでの投稿での説明は割愛する。
SFTPサーバを用意する - Qiita (usutaniさんの投稿)
鍵を作る
クライアント側で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さんの投稿)
- chrootされたsftp専用ユーザを作る - Qiita (kawazさんの投稿)