何?
WindowsServerでファイルをSFTPで連携したかったので、
OpenSSHでSFTPサーバを立ててみたので、その設定を記載する。
要件
- 公開鍵認証、パスワード認証不可
- SFTPで特定のディレクトリのみアクセス可
- SSH接続不可 → SFTPルートディレクトリ以外見せたくない
- SSH転送でアクセス可
- 特定ユーザでのみSFTPログイン可
設定手順
-
OpenSSH インストールし、サービス登録
手順は省略。 -
SFTPログイン用のグループとユーザを作成
アクセス制御はグループ指定で行う予定のため。 -
アクセスユーザの公開鍵登録
下記ファイルにアクセスユーザの公開鍵登録
C:\Users(SFTPログイン用ユーザ).ssh\authorized_keys
SFTPログイン用ユーザのauthorized_keysにのみ公開鍵登録することでアクセス制御 -
OpenSSHの設定ファイルを修正
Windowsで、Web上でよく見る手順でOpenSSHをインストールしたならば「C:\ProgramData\ssh\sshd_config」に設定ファイルが作成されているはず。
sshd_configの設定
修正した差分部分のみ
# Logging
#SyslogFacility AUTH
#LogLevel INFO
# ファイルにINFOレベル以上のログ出力
# ログ出力先はC:\ProgramData\ssh\logs
SyslogFacility LOCAL0
LogLevel INFO
# Authentication:
#MaxSessions 10
#PubkeyAuthentication yes
# 公開鍵認証
PubkeyAuthentication yes
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
# パスワード認証不可
PasswordAuthentication no
# GSSAPI options
#GSSAPIAuthentication no
#Banner none
# override default of no subsystems
#Subsystem sftp sftp-server.exe
# SFTPサーバはsshdのプロセスで動作
Subsystem sftp internal-sftp
# Example of overriding settings on a per-user basis
#Match User anoncvs
# PermitTTY no
# ForceCommand cvs server
# Administratorのアクセス許可する公開鍵登録ファイルの特別パス指定は無効
#Match Group administrators
# AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys
# SFTPログイン用のグループの場合、sftpログをファイルへログ出力
# アクセス可能なルートディレクトリに「C:\SFTP_ROOT\」を設定
Match Group SftpGroup
ForceCommand internal-sftp -f LOCAL0 -l INFO
ChrootDirectory C:\SFTP_ROOT\
うまく動作しない所
WindowsServer2016stdでSFTPサーバログがログ出力されない。
Windows10ならば、「C:\ProgramData\ssh\logs\sftp-server.log」にログ出力されるが、
WindowsServer2016stdではログ出力されない。調査中。
※2020/03/18追記
WindowsServer2016stdではログ出力されない。調査中。
WindwosServer2016stdでログ出力されない件解決しました。
SFTPログインユーザにログ出力フォルダの権限が無いためでした。