Java Apache sshd隧道

时间:2014-09-18 12:52:25

标签: java apache sshd

我想创建java应用程序,这将是我的自定义sshd服务器。 客户端应该能够创建到此服务器的隧道。

现在我有了这个有效的例子:

import org.apache.sshd.SshServer;
import org.apache.sshd.common.ForwardingFilter;
import org.apache.sshd.common.Session;
import org.apache.sshd.common.SshdSocketAddress;
import org.apache.sshd.server.PasswordAuthenticator;
import org.apache.sshd.server.keyprovider.SimpleGeneratorHostKeyProvider;
import org.apache.sshd.server.session.ServerSession;

import java.io.IOException;


public class Test {

public static void main(String[] args) throws IOException {
    // create default server
    SshServer server = SshServer.setUpDefaultServer();
    server.setPasswordAuthenticator(new PasswordAuthenticator() {
        @Override
        public boolean authenticate(String username, String password, ServerSession session) {
            return true; // auth everyone
        }
    });

    server.setPort(2222);

    // allow forwarding
    server.setTcpipForwardingFilter(new ForwardingFilter() {
        @Override
        public boolean canForwardAgent(Session session) {
            return true;
        }

        @Override
        public boolean canForwardX11(Session session) {
            return true;
        }

        @Override
        public boolean canListen(SshdSocketAddress address, Session session) {
            return true;
        }

        @Override
        public boolean canConnect(SshdSocketAddress address, Session session) {
            return true;
        }
    });

    // random hostkey provider
    server.setKeyPairProvider(new SimpleGeneratorHostKeyProvider("hostkey"));
    server.start(); // start server
}
}

此时,我有最小的sshd服务器。在运行时,可以建立隧道:

  

ssh user @ host -p 2222 -R port:host:port -N

问题是,用户无法两次创建到同一端口的隧道。第一次连接成功,但在隧道断开连接后重新连接服务器说,该端口已在使用中。

第二个问题是通过外部IP无法建立连接。

例如,服务器是192.168.1.10。客户端构建隧道到服务器并转发端口2020。 现在,nmap -p 2020 localhost会说,该端口已打开,但nmap -p 2020 192.168.1.10会说该端口已关闭。

我想问的是如何强制sshd服务器重用先前使用过的封闭端口,以及如何让它在外部IP上宣布打开的端口。

0 个答案:

没有答案