0
使用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");
}
}
凡ServerVariables
店变量与我的软件,SshSessionCommandWriter
做我/ O操作,并且SshCommandManager
解释在SshSessionCommandWriter
中读取的命令,并向客户端返回一个值。
如果我能找到一种方式来获取运行该命令的用户的用户名,那对我的用例来说是完美的。我目前在和SshPasswordAuthenticator
中有此信息,但不在SshShellFactory
中。