下面基本上是Apache MINA服务器的代码。它很棒。当我与WinSCP连接时,我被限制在目录中并且无法返回,这很好。另一方面,当我连接SSH终端时,我可以返回和转发目录,我不想发生这种情况。
我知道这一行限制了WinSCP的用户:
sshd.setFileSystemFactory(
(FileSystemFactory) new VirtualFileSystemFactory(new File("C:/my apps").toPath()));
使用的JAR版本(意识到版本之间存在很大差异):
SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPort(8080);
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider(new File("hostkey.ser")));
sshd.setUserAuthFactories(userAuthFactories);
sshd.setCommandFactory(new ScpCommandFactory());
sshd.setSubsystemFactories(sftpCommandFactory);
sshd.setShellFactory(new ProcessShellFactory(new String[] { "cmd" }));
// "/bin/bash", "-i", "-l"
sshd.setFileSystemFactory(
(FileSystemFactory) new VirtualFileSystemFactory(new File("C:/my apps").toPath()));
sshd.setPasswordAuthenticator(new PasswordAuthenticator() {
@Override
public boolean authenticate(String username, String password, ServerSession session) {
if ((username.equals("username")) && (password.equals("password"))) {
return true;
}
return false;
}
});
sshd.start();
while (true);
我想知道是否有人遇到过这个并且已经在Java中完成了,因为我在API中找不到任何内容。
答案 0 :(得分:0)
你必须实现一个完整的新shell(在你的情况下是cmd
的替代品)来chroot shell中的用户。这几乎不可能。
在* nix系统上有用于chroot shell的现成工具。但似乎您的服务器在Windows上运行(cmd
)。我不认为在Windows上有任何chrooting工具。我甚至无法想象它是可能的。
但是,为什么不设置用户权限以允许登录用户只漫游到您希望他/她的文件夹中?