Windows Server 2022 を sftpサーバとして利用する

windows server 2022 を sftpサーバとして利用するための設定になります。

# 要件
・専用のユーザ(sftpuser)を利用して接続する。
・Administratorユーザは接続禁止とする。
・認証はパスワードとする（公開鍵を使用しない）。
・特定のディレクトリにchrootする。

# 構築フロー
・ユーザの作成
・ディレクトリの作成
・OpenSSHのインストール
・sshd_configの設定
・接続確認

# 1.ユーザの作成
sftp接続用ユーザを作成します。
グループ：`sftpgroup`
ユーザ：`sftpuser`

Windowsメニューを右クリックし、`コンピュータの管理`から`ローカルユーザとグループ` - `ユーザ`　および `グループ`にて新規ユーザおよびグループを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/24cdc102-efb3-c8fd-ccd9-9c1415df50e0.png)



# 2.ディレクトリの作成
sftpアクセス用のディレクトリを作成します。
ディレクトリ作成後、sftp用ユーザのフルコントロール権限を付与します。
ディレクトリ：`D:\transport\sftproot\sftpsite`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/4b64db45-efd4-c3a2-c292-d792a77cfd07.png)



# 3.OpenSSHのインストール
OpenSSHのインストールを行います。
`設定` - `アプリ` - `アプリと機能`を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d7d72ac8-8ec5-3a91-5f76-1a206999b215.png)

`オプション機能`から`機能の追加`を表示します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/a90b0a47-4e3a-a6da-4e42-0182cdd25052.png)

`OpenSSHサーバー`を選択し、`インストール`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/b6f23511-0760-8066-e773-30a1ea0a0797.png)

しばらくして、インストールが完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/15f1683c-b7b5-4c5d-975e-4d360b313ae8.png)

:::note warn
インストールにはインターネットへの接続が必要になります。
:::

<br>

続いてサービスの設定を行います。
`サーバマネージャ`から`ツール` - `サービス`を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/18715f3a-f0b7-e8e6-76b6-4adddd6c2704.png)

`OpenSSHサーバ`のプロパティを選択し、スタートアップの種類を`自動`に変更し、サービスの状態を`開始`します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/88eefdff-3ff4-6333-9eb0-227897dd870e.png)

:::note warn
後述の`sshd_config`はサービスを一度起動しないと作成されません。
:::

# 4.sshd_configの設定
sshd_configの設定変更をします。
以下ディレクトリにコンフィグファイルがあることを確認します。
場所：`C:\ProgramData\ssh\sshd_config`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/f5500d0c-7b23-b22f-ce76-28726cf778d0.png)

sshd_configについて以下のように修正します。
ファイル修正後、`OpenSSHサーバー`サービスを再起動します。


```powershell:sshd_config(一部)
（中略）
#PermitRootLogin prohibit-password  
PermitRootLogin no                   ### おまじない ###

（中略）
#PubkeyAuthentication yes  
PubkeyAuthentication no              ### パスワード認証のみ有効化 ###

（中略）
#Match Group administrators                                                     ### 無効化 ###
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys   ### 無効化 ###

DenyGroups administrators           ### Administratorsグループの接続無効化 ###

AllowGroups sftpgroup               ### sftpgroupグループの接続有効化 ###

Match User sftpuser                 ### sftpuser向け設定 ### 
       ChrootDirectory D:\transport\sftproot\sftpsite　　### sftpuserのchroot設定 ###

```

<details><summary>sshd_config全文</summary>


```powershell:sshd_config
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey __PROGRAMDATA__/ssh/ssh_host_rsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_dsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ecdsa_key
#HostKey __PROGRAMDATA__/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes
PubkeyAuthentication no

# 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
AuthorizedKeysFile	.ssh/authorized_keys

#AuthorizedPrincipalsFile none

# For this to work you will also need host keys in %programData%/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# GSSAPI options
#GSSAPIAuthentication no

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#PermitUserEnvironment no
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# override default of no subsystems
Subsystem	sftp	sftp-server.exe

# Example of overriding settings on a per-user basis
#Match User anoncvs
#	AllowTcpForwarding no
#	PermitTTY no
#	ForceCommand cvs server

#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

DenyGroups administrators

AllowGroups sftpgroup

Match User sftpuser
       ChrootDirectory D:\transport\sftproot\sftpsite
```
</details>




# 5.接続確認
Administratorユーザでsftp接続を実施します。
アクセスが拒否されることを確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/f576f5dc-b53d-422b-6a83-d05e876ef592.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/08721319-fe61-6712-3ff9-0b29807cd7ad.png)

<br>

sftpuserでsftp接続を確認します。
パスワード認証で接続できることを確認しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/1bb4bfb4-aa06-d66b-4a22-f49dde54f5d3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/68e34562-2c99-53e2-f129-e644814087e4.png)

:::note info
chroot設定しているので、接続先ディレクトリは `/` となっています。
:::

<br>

ファイル転送も問題なく実施できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/d253b30e-17cc-557d-15fa-9c10aea0642e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/fc10e4c5-b46e-9793-a5f6-91a8da8c3fe2.png)



# 参考
https://learn.microsoft.com/ja-jp/windows-server/administration/openssh/openssh_server_configuration

https://www.server-world.info/query?os=Windows_Server_2022&p=ssh&f=1

https://tech.kurojica.com/archives/32888/