当前位置: 首页 > news >正文

sshj使用代理连接服务器

之前我是用jsch连接服务器的,但是没办法使用私钥连接,搜了一下似乎是不支持新版的SSH-rsa,并且jsch很久没更新了,java - "com.jcraft.jsch.JSchException: Auth fail" with working passwords - Stack Overflow

没办法只好使用sshj来连接,但是sshj并没有找到任何和proxy相关的方法,我在网上也没找到任何sshj使用代理的文章,只好去看git上的源码,发现在老版本是有proxy方法的,在0.33分支上废弃后删掉了,这个信息后来也删除了,只有看history才能看到,实属有点坑

可以看出来要通过注入SocketFactory来实现代理,sshj连接的代码我就不放了,网上都有,就放代理相关的代码

自定义ProxySocketFactory

import javax.net.SocketFactory;
import java.io.IOException;
import java.net.*;public class ProxySocketFactory extends SocketFactory {private final Proxy proxy;public ProxySocketFactory(Proxy proxy) {this.proxy = proxy;}@Overridepublic Socket createSocket() {return new Socket(proxy);}@Overridepublic Socket createSocket(String host, int port) throws IOException, UnknownHostException {Socket socket = new Socket(proxy);socket.connect(new InetSocketAddress(host, port));return socket;}@Overridepublic Socket createSocket(InetAddress address, int port) throws IOException {Socket socket = new Socket(proxy);socket.connect(new InetSocketAddress(address, port));return new Socket(address, port);}@Overridepublic Socket createSocket(String host, int port, InetAddress clientAddress, int clientPort) throws IOException, UnknownHostException {Socket socket = new Socket(proxy);socket.bind(new InetSocketAddress(clientAddress, clientPort));socket.connect(new InetSocketAddress(host, port));return socket;}@Overridepublic Socket createSocket(InetAddress address, int port, InetAddress clientAddress, int clientPort) throws IOException {Socket socket = new Socket(proxy);socket.bind(new InetSocketAddress(clientAddress, clientPort));socket.connect(new InetSocketAddress(address, port));return socket;}
}

在SSHClient.connect之前注入

if(!StringUtils.isEmpty(proxy)){//proxy=127.0.0.1:2100String[] split = proxy.split(":");sshClient.setSocketFactory(new ProxySocketFactory(new Proxy(Proxy.Type.HTTP, new InetSocketAddress(split[0], Integer.valueOf(split[1])))));
}
sshClient.connect(host,port);

http://www.lryc.cn/news/440147.html

相关文章:

  • 【Leetcode:1184. 公交站间的距离 + 模拟】
  • VRRP 笔记
  • 【洛谷】P3743 小鸟的设备 的题解
  • 算法面经手撕系列(2)--手撕BatchNormlization
  • mysql-搭建主从复制
  • MiniMaxi-共创智能新体验新手入门
  • Docker torchserve 部署模型流程
  • mybatis开启日志
  • MobaXterm : Network error: Connection refused(连接被拒绝)
  • 电脑的主板,内存条插多少合适?
  • C++:初始化列表
  • [000-01-008].第05节:OpenFeign特性-重试机制
  • Android 11(API 级别 30)及以上版本中,将Bitmap保存到设备上
  • django orm增删改查操作
  • 禁忌搜索算法(TS算法)求解实例---旅行商问题 (TSP)
  • Rust 所有权 简介
  • linux-网络管理-防火墙配置
  • 【springboot】实现文件上传和下载
  • 【RabbitMQ】RabbitMQ如何保证数据的可靠性,RabbitMQ如何保证数据不丢失,数据存储
  • Redis 篇-初步了解 Redis 持久化、Redis 主从集群、Redis 哨兵集群、Redis 分片集群
  • 算法基础-二分查找
  • LeetCode:1184. 公交站间的距离 一次遍历数组,复杂度O(n)
  • 牛客周赛 Round 60(A,B,C,D,E,F)
  • vueCropper裁剪图片(不模糊)以及记录使用方法
  • 【HTML】HTML页面和常见标签
  • 鸿蒙 ArkUI组件二
  • PHP 实现 redis 分布式锁
  • vue3 自定义el-tree树形结构样式
  • 【网络安全】分享4个高危业务逻辑漏洞
  • 【装机教程】Visual Studio Community 2019离线安装