Apache Mina:在收到命令后获取用户的用户名

Apache Mina: Get the user's username upon receiving a command

使用 Apache Mina,我试图允许某些用户 运行 某些自定义 SSH 命令。但我无法弄清楚如何在 CommandFactory 中获取用户名或有关用户的任何类型的信息。

现在,我的服务器配置如下所示:

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 class 的样子:

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");
    }
}

其中 ServerVariables 存储与我的软件相关的变量,SshSessionCommandWriter 对流进行 I/O 操作,SshCommandManager 解释在 SshSessionCommandWriter 和 returns 对客户的价值。

如果我能找到一种方法以某种方式获取用户的用户名 运行ning 命令,那将非常适合我的用例。我目前在 SshSessionFactorySshPasswordAuthenticator 中有此信息,但在 SshShellFactory.

中没有

所以我创建的 SshSessionCommandWriter 对象必须实现 Command 接口。此命令接口在其合同中具有方法 public void start(Environment env)。原来用户名存储在环境变量中:

public class SshSessionCommandWriter implements Command, Runnable {

    @Override
    public void start(Environment env) throws IOException {
        String username = env.getEnv().get(Environment.ENV_USER);
    }
}