web-dev-qa-db-ja.com

SSH ForceCommandディレクティブでSFTPを使用する

次のForceCommandディレクティブを使用してSSHサーバーをセットアップしました(group2.fqdnと呼びます):

Match Group group1
       ForceCommand ssh -t group1.fqdn

Match Group="*,!local,!group2,!root"
       ForceCommand ssh -t group3.fqdn

これは、group2にないユーザーのsftpを壊します。 sftpが機能するようにこれを変更するにはどうすればよいですか?

したがって:user1 of group1は以下を行います:

sftp group2.fqdn

そして、彼らは(おそらくパスワードを2回入力する必要がある)実際にsftpからgroup1.fqdnを実行しています。これはできますか?


環境:
ラボでは、各グループにいくつかのUbuntuサーバーがありますが、外部アクセスが許可されるのは1つだけであるため、すべてのグループが1つのグループのサーバーにログインする必要があります。 。以前はカスタムシェルでこれを行っていましたが、ハッキングの代わりに使用可能なサーバーオプションを使用しようとしています。カスタムシェルバリアントはSFTPを許可しませんでしたが、これも許可しませんが、どういうわけか、これらすべてのサーバーでSFTPを機能させたいと思います。

2
muru

SFTPを機能させるコツは、クライアントから受け取ったSSHコマンドをそのままサーバーに渡すことです。 nixおよびLinuxの質問 に対してscpまたはsftpを実行すると何が起こるかをテストしているときに、これを発見しました。

これで、私の構成は次のようになります。

Match Group group1
       ForceCommand /usr/local/bin/ssh_wrapper group1

Match Group="*,!local,!group2,!root"
       ForceCommand /usr/local/bin/ssh_wrapper group3

どこ /usr/local/bin/ssh_wrapperは:

#! /bin/sh

/usr/bin/ssh -t -o StrictHostKeyChecking=no $USER@${1:-default}.fqdn $SSH_ORIGINAL_COMMAND

いくつかの簡単なテストから、sftpscpはこの構成で問題なく動作します。

2
muru