質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Q&A

0回答

228閲覧

OpenSSHサーバーのルートディレクトリに他サーバーのディレクトリを設定する方法

naoki.yoshihisa

総合スコア0

公開鍵認証

公開鍵認証とは、公開鍵と秘密鍵の2つの鍵の組を利用する、SSHで利用される認証方式です。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

0グッド

1クリップ

投稿2024/11/11 18:26

実現したいこと

Windows環境のサーバーで、AサーバーにOpenSSHサーバーをインストールして、同サーバーに鍵認証でSFTP接続した際、ルートディレクトリがBサーバーのディレクトリとなるようにしたい。

発生している問題・分からないこと

Aサーバーにあるコンフィグファイル「sshd_config」において、「ChrootDirectory 」にルートディレクトリとしたいパスを記載することで、SFTP接続後のルートディレクトリは指定できることは把握済みで、Aサーバーにある実ディレクトリを「ChrootDirectory 」に指定したうえで、鍵認証接続すると問題なくSFTP接続およびファイルの送受信できることは確認済みなのですが、ルートディレクトリをBサーバーの実ディレクトリとしたい場合の対応方法が不明です。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

ルートディレクトリとしたいBサーバーの対象ディレクトリに対して、Aサーバーでシンボリックリンク作成したりマウントして、コンフィグファイル「sshd_config」に以下のような設定を行いました。

Match User (SFTP接続ユーザー名) ChrootDirectory (Aサーバーで作成したシンボリックリンクやマウントしたパス) ForceCommand internal-sftp

シンボリックリンクの場合、以下のようなメッセージが表示されてSFTP接続できず、

client_loop: send disconnect: Connection reset
Connection closed

またログを確認すると、

fatal: safely_chroot: stat("(Aサーバーに作成したシンボリックリンクパス)"): Permission denied

と出力されていました。

マウントした場合もシンボリックリンク時と同様のエラーメッセージが出力されてSFTP接続できず、ログには、

fatal: safely_chroot: stat("(Aサーバーでマウントしたパス)"): No such file or directory

と出力されていました。

尚、Aサーバーから見たBサーバーの実ディレクトリのネットワークパスを、「ChrootDirectory」に直接指定してみましたが、結果はマウントした場合と全く同じ(エラーメッセージやログ)でした。

補足

シンボリックリンクの方は権限エラーとなっていましたが、接続するSFTPユーザーに対してフルコントロールが割り当てられていることを確認済みです。

マウントの方は、そのようなパスがないとのことですが、エクスプローラー経由で正しくパスが存在していることを確認済みです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2024/11/12 13:58

シンボリックリンクというのは無理筋というか、何故リンク先を直接書かないのか理解できません。 Q1: マウントというのは具体的にどんなコマンドで、何をどこにマウントしてますか? Q2:「Aサーバーから見たBサーバーの実ディレクトリのネットワークパス」というのは一体何のことですか? これも具体的に書きましょう。 Q3: ChrootDirectory ~~~ と書いたとすると、シェルのコマンドラインで、cd ~~~ で移動できることを確認していますか? 各質問の「何」というのは利用者が決めたファイル名を聞いてるわけじゃなくて、何者かを聞いているので、OS標準じゃなくて利用者が勝手に決めた英数字部分は、/XXX/YYY などに変えてもいいですが。同じ物は同じ文字列に、違う物は違う文字列に。「利用者が勝手に決めた英数字部分」以外は変えちゃ駄目です。
naoki.yoshihisa

2024/11/13 09:32

ご回答いただきありがとうございます。 以下、ご質問いただいた点等について、追記させていただきますので、ご確認いただけますと幸いです。 >何故リンク先を直接書かないのか理解できません。 既に検証済みで、最初の投稿にて以下のように記載させていただいております。 ------------------------------------------------------------------------------------------------------------ 尚、Aサーバーから見たBサーバーの実ディレクトリのネットワークパスを、「ChrootDirectory」に直接指定してみましたが、結果はマウントした場合と全く同じ(エラーメッセージやログ)でした。 ------------------------------------------------------------------------------------------------------------ >Q1: マウントというのは具体的にどんなコマンドで、何をどこにマウントしてますか? Aサーバー上で、以下のコマンドを実行してZドライブとしてBサーバーの対象ディレクトリを マウントしました。 net use Z: (Aサーバーから見たBサーバーの実ディレクトリのネットワークパス) >Q2:「Aサーバーから見たBサーバーの実ディレクトリのネットワークパス」というのは一体何のことですか? これも具体的に書きましょう。 業務情報なので実際のパスを記載することができませんが、サンプルとして以下のような形になります。 1)BサーバーのIPアドレス:100.200.300.400 2)Bサーバーの対象となる実ディレクトリ:C:\temp\test 3)2)のディレクトリに対する共有設定:「C:\temp」のところで共有がかかっている 4)Aサーバーのエクスプローラーから2)のディレクトリに対してアクセスする際のネットワークパス:\\100.200.300.400\test >Q3: ChrootDirectory ~~~ と書いたとすると、シェルのコマンドラインで、cd ~~~ で移動できることを確認していますか? 上記は「~~~」がシンボリックリンクを指定した場合のことを指していますでしょうか? だとすると、Aサーバー上のコマンドプロンプトで作成したシンボリックリンク(リンク先はBサーバーの対象となる実ディレクトリ)にcdコマンドで移動でき、かつ中身も確認できることを確認済みです。
otn

2024/11/13 17:14

失礼しました。Windowsのサーバーですね。 net use でのネットワークドライブ接続を「マウント」と表現したと言うことですね。 「マウント」という表現からてっきりUnix/Linuxのことかと早合点してしまっていましたが、タグがWIndowsでしたね。 Windwosサーバーについてはほとんど知見がないのですが、おそらくWindowsであっても、シンボリックリンクでは駄目だと思いますよ。 Windowsのネットワークドライブ接続は、OS単位でなく、ユーザー単位なので、そのあたりが原因ではないかと言う気がします。 > 上記は「~~~」がシンボリックリンクを指定した場合のことを指していますでしょうか? いいえ。全ケースの話です。 > >何故リンク先を直接書かないのか理解できません。 > 既に検証済みで、最初の投稿にて以下のように記載させていただいております。 直接書いても駄目なので、シンボリックリンクを作ってみたと言うことなら、駄目に決まっています。
bsdfan

2024/11/14 06:37

古いですが、下記 issue が参考にならないでしょうか。 https://github.com/PowerShell/Win32-OpenSSH/issues/1258 https://github.com/PowerShell/Win32-OpenSSH/issues/518 全部をちゃんとは読んでないのですが、パスワード認証でないsshセッションではネットワーク共有の認証がされていない状態のようです。chroot自体はシンボリックリンクでできるようなので、パスワード認証でsshするようにすればできるんじゃないでしょうか。
otn

2024/11/14 09:43

> chroot自体はシンボリックリンクでできるようなので、 再び失礼しました。chrootの場所自体の指定でシンボリックリンクを使う話なので、chroot前にリンク先を参照するわけで、出来ないと言うこともないでしょうね。ただ、シンボリックリンクじゃなくて、シンボリックリンク先を書けば良い話ですが。
bsdfan

2024/11/14 10:32

試したわけではないのですが、issue によると、chroot 先に共有フォルダを(uncで)指定することはできず(そういう仕様)、抜け道としてシンボリックリンクを使えばできるということのようです。
naoki.yoshihisa

2024/11/19 10:06

ご回答いただきありがとうございます。 やはり、今回のような状況の場合鍵認証は難しいと理解いたしました。 OpenSSH以外のサービスを視野に入れたり、他に力技で解決する方法がないか検討してみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問