search
LoginSignup
4

posted at

updated at

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

はじめに

題名の通り、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を再起動すると、設定が反映されます。

参考

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
What you can do with signing up
4