2017-07-29 7 views
0

Apache Minaを使用して、特定のユーザーに特定のカスタムSSHコマンドを実行させようとしています。しかし、私はどのようにユーザ名やユーザに関する情報を入手するかを把握することはできません。CommandFactoryApache 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にはありません。

答えて

0

私が作成した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); 
    } 
} 
関連する問題