クライアントとサーバーでパスワード認証を使用した SFTP のセットアップと動作確認を行う
環境
- Windows
-
- Windows 10 Pro
- Windows Server 2019
- Windows 7
- Windows Server 2012 R2
- OpenSSH
-
- 7.7p1
- 8.1p1 - Beta
※他のバージョンでも動作しますが未確認です
はじめに
ここではクライアントとサーバー間で SFTP による通信を行うための手順について説明します。 認証方法としてはセットアップが一番簡単なパスワード認証を行います。
事前準備
- クライアントに OpenSSH クライアントがインストールされていること
- サーバーに OpenSSH サーバーがインストールされていること
サーバー側で SFTP サーバーの準備をする
管理者権限(administrators)のあるアカウントでサーバーにログインします。
PowerShell を起動します。
以下のコマンドを入力します。(ssh コマンドでもかまいません)
sftp localhost
まだ何もセットアップしていないので接続できないことが確認できます。
SFTP アカウントの作成
SFTP でログインするアカウントを作成します。 Windows のアカウントが SFTP のログインアカウントとして扱われます。
スタートメニューを右クリックして「コンピューターの管理」を選択します。
「ローカル ユーザーとグループ」を展開し、「ユーザー」を右クリックして「新しいユーザー」を選択します。
ユーザー名とパスワードを入力します。ユーザー名は SFTP でログインするユーザー名になります。大文字小文字は区別されません。
公開鍵認証の設定でサインインすることになりますが、Admonistrators 権限は不要です。 リモート環境の場合は Remote Desktop Users の権限を付加しておいてください。
SSH のポートオープン
22番ポートを開きます。コマンドでもできますが、ここでは GUI を使用して設定します。 スタートメニューから「Windows 管理ツール」フォルダ⇒「セキュリティが強化された Windows Defender ファイアウォール」を選択します。
「受信の規則」を右クリックして「新しい規則」を選択します。
「ポート」を選択して「次へ」を選択します。
「TCP」を選択して「22」を入力します。
「接続を許可する」を選択します。
「ドメイン」「プライベート」にチェックを入れます。インターネット上のサーバーの場合は「パブリック」にもチェックを入れますが 環境に合わせて設定してください。
名前はなんでもいいですが、SSH (SFTP) のためにポートを開けたことが分かりやすい名前にしてください。
一覧に追加されました。
SSH サービスの起動設定
コマンドでも設定できますが、ここでは GUI を使用して設定します。 スタートメニューを右クリックして「コンピューターの管理」を選択します。
「サービスとアプリケーション」⇒「サービス」を選択し、中央の一覧から「OpenSSH SSH Server」を選択します。 左側に「サービスの開始」のリンクが表示されますので、リンクをクリックすると SSH サーバーが起動します。
これで SSH が使用できるようになりましたが、Windows を再起動したりすると再度手動で起動しなければならないため、 自動で SSH サーバーが起動するようにします。 「OpenSSH SSH Server」をダブルクリックします。
スタートアップの種類を「自動」に設定して OK ボタンをクリックします。
SSH のログイン確認
サービスが起動したので試しにログインしてみます。コマンドプロンプト、または PowerShell を起動して以下のコマンドを入力します。 (<>の箇所は置き換えてください)(接続確認なので ssh コマンドでもかまいません)
sftp <ユーザー名>@localhost
「yes」を入力します。
パスワードを入力します。
表示が変わりログインできたことになります。
試しに「dir」コマンドを入力するとフォルダの一覧が見れます。(文字化けするのは仕様です)
クライアント側から SFTP でサーバーに対しファイルを送受信する
クライアントPC 側にサインインします。 ファイルの送受信を確認するために「C:\Temp」フォルダを作成してテキストを入力した「test.txt」ファイルを配置します。 (日本語ファイル名だと送受信でエラーになるため英数字にしておきます)
コマンドプロンプトまたは PowerShell を起動します。
以下のコマンドで SFTP でログインします。(<>の箇所は置き換えてください)
sftp <ユーザー名>@<サーバー名>
「yes」と入力します。
パスワードを入力しログインします。
pwd や dir コマンドでログイン出来ていることを確認できます。
put コマンドでファイルを送信します。
put c:\temp\test.txt
サーバー側の「C:\Users\sftptest」フォルダを見てみると test.txt ファイルが送信されていることを確認できます。
クライアントから get を試してみます。
get test.txt c:\temp\test2.txt
ファイルが取得できたことを確認出来ました。
まとめ
SFTP を使用してクライアントとサーバーでファイルの送受信ができることを確認出来ました。 通信内容も暗号化されているので第三者に傍受される可能性も低くなっています。
ただ、今回認証方法としてパスワード認証を行っていますが、 セキュリティ的には少し弱くなってしまいますので 次回は公開鍵認証について説明したいと思います。