gpt4 book ai didi

java - 将绑定(bind)地址与 Jsch session 结合使用

转载 作者:太空宇宙 更新时间:2023-11-04 09:39:38 25 4
gpt4 key购买 nike

我正在尝试设置一个地址,以便当我将服务器留给 scp 文件时,我不会留下服务器主机名,而是留下不同的 ip。 linux 方面的事情已经全部设置完毕。我可以运行以下 ssh 命令,一切都会按预期工作。

ssh -b 1.1.1.1 testuser@sshhost

我的问题是现在我尝试使用 JSch 来 scp 文件,但我无法找出正确的 session 设置。我正在使用公共(public)私钥并且这些 key 工作正常。以下是我当前的流程。

JSch jsch = new JSch();
Keypair keyPair = KeyPair.load(jsch, privateKey, publicKey);
boolean keyPairdecrpy = keyPair.decrypt(passphrase);
if(keyPairdecrpy)
{
jsch.addIdentity(privateKey, passphrase);
}
Session session = jsch.getSession("user", "sshhost", 22);
Properties config new Properties();
config.put("StrickHostKeyChecking:, "no");
config.put("PreferredAuthentications", "publickey");
session.setConfig(config);
session.connect(timeout);

所以到目前为止我尝试过的事情。

  1. 创建套接字工厂并设置绑定(bind)地址,然后运行

    InetSocketAddress addr = new InetSicketAddress("1.1.1.1", 0);
    Socket socket = new Socket(sshhost, 22);
    socket.bind(addr);
    session.setSocketFactory((SocketFactory) socket);
  2. 尝试将内置端口转发与 session 类一起使用

    session.setPortForwardingL(0, "1.1.1.1", 22);

最佳答案

使用以下SocketFactory对我有用:

class MySocketFactory implements SocketFactory {

@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
Socket socket = new Socket();
socket.bind(new InetSocketAddress("1.1.1.1", 0));
socket.connect(new InetSocketAddress(host, port));

return socket;
}

@Override
public InputStream getInputStream(Socket socket) throws IOException {
return socket.getInputStream();
}

@Override
public OutputStream getOutputStream(Socket socket) throws IOException {
return socket.getOutputStream();
}

}

我在 Linux 机器上使用 netstat -an 对此进行了验证,并观察到连接的本地端已绑定(bind)到具有临时端口号的 1.1.1.1(我临时使用此地址设置了一个接口(interface))。

我在调用 session.connect() 之前立即设置工厂:

SocketFactory sfactory = new MySocketFactory();
session.setSocketFactory(sfactory);

session.connect();

关于java - 将绑定(bind)地址与 Jsch session 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56120486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com