Apache Minaを使用して、特定のユーザーに特定のカスタムSSHコマンドを実行させようとしています。しかし、私はどのようにユーザ名やユーザに関する情報を入手するかを把握することはできません。CommandFactory
。Apache Mina:コマンドを受け取ったときにユーザーのユーザー名を取得します。
今、私のサーバー構成は次のようになります。
SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPasswordAuthenticator(new SshPasswordAuthenticator());
sshd.setPort(localServerPort);
sshd.setCommandFactory(new ScpCommandFactory());
sshd.setShellFactory(new SshShellFactory());
sshd.setSessionFactory(new SshSessionFactory());
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File("my.pem").getAbsolutePath()));
sshd.setFileSystemFactory(new VirtualFileSystemFactory(path.getAbsolutePath()));
List<NamedFactory<Command>> namedFactoryList = new ArrayList<>();
namedFactoryList.add(new SftpSubsystem.Factory());
sshd.setSubsystemFactories(namedFactoryList);
そして、これは私のSshShellFactory
クラスは次のようになります。
import org.apache.sshd.common.Factory;
import org.apache.sshd.server.session.SessionFactory;
import org.apache.sshd.server.Command;
import org.apache.sshd.server.CommandFactory;
public class SshShellFactory implements CommandFactory, Factory<Command> {
@Override
public Command createCommand(String command) {
return new SshSessionCommandWriter();
}
@Override
public Command create() {
return createCommand("none");
}
}
SshSessionCommandWriter
は私ない私のソフトウェアに関連するServerVariables
店舗変数、ストリームの/ O操作とSshCommandManager
は、SshSessionCommandWriter
で読み取られたコマンドを解釈し、クライアントに値を返します。
私は何とかコマンドを実行しているユーザーのユーザー名を取得する方法を見つけることができたら、私の使用例には完璧です。私は現在とSshPasswordAuthenticator
にこの情報を持っていますが、SshShellFactory
にはありません。