LoginSignup
3
4

More than 1 year has passed since last update.

OpenSSH を使用したEC2のWindowsサーバーを用いて、 ローカルPCから SFTPで接続する構築

Last updated at Posted at 2021-12-06

はじめに

題名の通り、EC2のwindowsサーバーに対して、ローカルPCからSFTP接続でファイル転送ができる構築を作成する方法についてです。
windowsサーバーの構築については、下記の記事で説明しています。

流れ

  1. EC2を起動設定
  • Windowsサーバーにリモートデスクトップで接続する
  • 日本語設定と時計合わせ
  • Visual Studio Codeをインストール
  • ApacheとVisual C++ ランタイムのインストール
  • Apacheの起動↑①ではここまで
  • PHPインストールし、Web上で確認
  • RDSの起動
  • composerとlaravelインストール
  • プロジェクトを作成し、laravelページをWeb上で確認
  • phpmyadminインストールし、Web上で確認↑②ではここまで
  • OpenSSH を使用して Windows に SFTP サーバーをセットアップ←今回の内容!

OpenSSH を使用して Windows に SFTP サーバーをセットアップ

Windows に SFTP クライアントをインストール

Windows10には、OpenSSH クライアントが初期インストールされているはずなので、以下の記事を参考に、確認しましょう。
インストールされていない場合も、参考になります。

OpenSSHサーバーをインストール

こちらの記事通りにインストールしましょう。

OpenSSH SSH サーバーを起動

公開鍵認証を使用したSFTP接続するため、記事のSSH サービスの起動設定ところまで進めましょう。

リモート環境の場合は 、SFTPユーザー対し、Remote Desktop Users の権限を付加を忘れないようにしましょう。

公開鍵認証作成

秘密鍵と公開鍵を作成します。

PowerShell を管理者権限で起動します。

スクリーンショット 2021-12-06 21.52.17.png

任意のパスで以下のコマンドで鍵を作成します。
鍵の名前は、id_rsaでなく任意の名前で問題ありません。

C:\> ssh-keygen -t rsa -f id_rsa

フォルダに公開鍵と秘密鍵が作成されます。 id_rsaが秘密鍵でid_rsa.pubが公開鍵です。

sftpユーザーでログインし、公開鍵を配置

Administratorでログインしている場合、ログアウトします。
そして、sftpユーザのアカウントで Windowsサーバーに対し、RDP接続しログインします。

SFTPユーザーででログインすると、以下のフォルダが作成されているはずです。
C:\Users\<ユーザー名>.EC2AMAZ-<ランダムな文字列7>

C:\Users\<ユーザー名>.EC2AMAZ-<ランダムな文字列7>配下に.sshフォルダがない場合、作成してください。

作成した公開鍵id_rsa.pubのファイル名をauthorized_keysに変更し、
C:\Users\<ユーザー名>.EC2AMAZ-<ランダムな文字列7>\.ssh配下に設置して下さい。

また、
スクリーンショット 2022-03-22 12.10.38.png

authorized_keys の権限は、他人から読み込みのみ可にし、書き込みは、sftpユーザーのみにしてください。
「アクセスを許可する」→「特定のユーザー...」をクリックすると、「共有する相手を選んでください」に遷移します。

スクリーンショット 2022-03-22 12.13.40.png
スクリーンショット 2022-03-22 12.15.18.png

authorized_keysファイルにアクセスできるユーザーは、「administrators」権限を持つユーザーSFTP ユーザーのみにする必要があります。
それ以外のユーザーにアクセス権限がついていると SFTP の接続は必ず失敗します。
例えば権限に「Users」や「Everyone」のグループが付加されていると NG です。

今回の場合、「.ssh」フォルダのアクセス権限は、「ユーザー:sftptest」のみにしています。

id_rsaファイルは、ローカルPCに渡します。

sshd_configファイル修正

C:\ProgramData\ssh配下に、sshd_configファイルがありますので、コピーして修正しましょう。
ProgramDataディレクトリは隠しフォルダなので、エクスプローラーの上部タブから隠しファイルにチェックすると見えます。
スクリーンショット 2021-12-06 22.47.51.png

5箇所修正します

C\ProgramData\ssh\sshd_config
~①~
#公開鍵認証を有効にするには以下のように変更します。
PubkeyAuthentication yesPubkeyAuthentication yes

~②~
#既定ではパスワード認証が有効になっているので、無効にしたい場合は以下のように変更します。
#PasswordAuthentication yes
PasswordAuthentication no

~③~
#SFTP のアカウントごとに公開キーを配置したいので以下の行をコメントアウトします。
Match Group administrators
       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

~④~
#SFTP のアカウントごとにルートディレクトリを指定したい場合は以下の行を追加します。 
#ChrootDirectoryは、sftpでログイン時のルートディレクトリを指定します。
#今回は、C:を指定しました。
Match User <ユーザー名>
       AuthorizedKeysFile .ssh/authorized_keys
       ChrootDirectory C:

~⑤~
#パーミッションエラーの詳細なログ出力設定
# Logging
#SyslogFacility AUTH
#LogLevel INFO
SyslogFacility LOCAL0
LogLevel DEBUG3

sshd_configを保存したら OpenSSH サーバーを再起動します。

スクリーンショット 2021-12-06 22.30.44.png

ローカルPCから以下の4つのログイン情報を使い、filezila等でsftp接続し、windowsサーバーにファイル転送できました!
・ ip:サーバーのipアドレス
・ ポート:22
・ ユーザー名:先程作成した名前
・ キー:id_rsa

ちなみに、ローカルPCからWindowsサーバーにSSH接続も可能です。

sftp接続エラー①

まずログファイルを確認しましょう。

私の場合、ログに以下のエラーが出ました。

'C:\\Users\\test.EC2AMAZ-T4V3DFA\\.ssh/authorized_keys'にauthorized_keysがありません!

見てみると、C:\Users\test\.ssh配下にauthorized_keysを置いていたのですが、C:\Users\test.EC2AMAZ-T4V3DFA\というフォルダが作成されておりました。
test.EC2AMAZ-T4V3DFA配下に、authorized_keysを置くとうまくログインできました。
おそらくEC2サーバーの仕業ですが、なぜ作られたのか、謎です。

sftp接続エラー②

それでもエラーになる場合、以下の2点を確認してみましょう。
php.iniextension=ssh2を追記
php_ssh2.dllc:\php8\ext 配下にあるか確認する

PATHが通らない場合

c:\Apache24\htdocs\automeasure>php -v
'php' is not recognized as an internal or external command,
operable program or batch file.

PATHが通らない場合、Open SSH Serverを再起動すると、設定が反映されます。

参考

3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4