我不确定这是否是由端口转发使用私钥而不是密码造成的,但下面是我正在尝试做的
我需要将本地端口3308一直转发到位于3306的my SQL DB。
我可以在我的本地终端上一起运行这样的事情
ssh -L 3308:localhost:3307 username@jumpbox "ssh -L 3307:mysqlDB:3306 username@server"
JSch jsch = new JSch();
jsch.addIdentity("~/.ssh/id_rsa");
Session session = jsch.getSession("username", "jumpbox");
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
int assinged_port = session.setPortForwardingL(3308, "localhost", 3307);
Session mysqlSession = jsch.getSession("username", "server", assinged_port);
mysqlSession.setConfig("StrictHostKeyChecking", "no");
mysqlSession.connect(); // Connection timed out here
mysqlSession.setPortForwardingL(3307, "mysqlDB", 3306);
我在JSch或端口转发方面做错了什么吗?
您的SSH
命令使用了运行在“跳转框”上的SSH客户端(另一个SSH
)。
当您希望使用Java实现相同的功能时,您有两种选择:
>
在Java中执行相同的操作,即使用session
在“跳转框”上运行ssh-l 3307:mysqldb:3306username@server
。
避免使用单独的SSH
工具,而是通过另一个转发端口在本地打开另一个SSH会话。实际上,您可以使用ssh
的最新版本,使用-j
(jump)开关(从OpenSSH 7.3开始就支持)来实现相同的功能:
ssh -L 3308:mysqlDB:3306 -J username@jumpbox username@server
参见OpenSSH支持多跳登录吗?
我更喜欢这种方法。
为了实施后一种方法:
>
必须将某个本地端口转发到服务器:22
,以便打开到服务器
的SSH连接:
JSch jsch = new JSch();
jsch.addIdentity("~/.ssh/id_rsa");
Session jumpboxSession = jsch.getSession("username", "jumpbox");
jumpboxSession.connect();
int serverSshPort = jumpboxSession.setPortForwardingL(0, "server", 22);
Session serverSession = jsch.getSession("username", "localhost", serverSshPort);
serverSession.connect();
然后通过服务器
将另一个本地端口转发到MySQL端口:
int mysqlPort = serverSession.setPortForwardingL(0, "mysqlDB", 3306);
通配符域 ngrok允许您将HTTP和TLS隧道绑定到通配符域。 所有通配符域(包括ngrok.io的子域)必须首先在您的信息中心为您的帐户保留。 使用-hostname or -subdomain时,指定前导星号以绑定通配符域。 绑定隧道以接收 example.com的所有子域上的流量 ngrok http --hostname *.example.com 80 通配符域规则 使用通配符域在ng
我有一个控制器,它在上接受一个名为的类。控制器方法看起来像这样: 第一控制器: 属性之一的类型为。 现在,我正在尝试添加某种包装器控制器(将在另一台服务器上运行),它也接受,并将请求转发给第一个控制器: 第二(包装)控制器: 当我向第一个控制器发送请求时: 无法写入JSON:找不到java类的序列化程序。伊奥。FileDescriptor,并且没有发现创建BeanSerializer的属性(为了避
并非您希望公开的所有服务都是基于HTTP或TLS的。 ngrok TCP隧道允许您公开通过TCP运行的任何联网服务。这通常用于公开SSH,游戏服务器,数据库等。启动TCP隧道很容易。 公开在端口1234上运行的基于TCP的服务 ngrok tcp 1234 例子 公开侦听默认端口的SSH服务器 ngrok tcp 22 暴露一个Postgres服务器侦听默认端口 ngrok tcp 5432 暴露
HTTPS隧道使用ngrok.com证书终止ngrok.com服务器上的所有TLS(SSL)流量。 对于生产级服务,您需要使用自己的TLS密钥和证书对您的隧道流量进行加密。 ngrok使这个特别容易与TLS隧道。 将TLS流量转发到端口443上的本地HTTPS服务器 ngrok tls -subdomain=encrypted 443 一旦你的隧道运行,尝试访问它与curl。 curl --ins
自定义子域名称 ngrok为它为您打开的HTTP隧道分配随机十六进制名称。 这对于一次性个人用途是可以的。 但是,如果您在黑客马拉松上显示URL或与第三方Webhook集成,则如果隧道名称更改或难以阅读,可能会令人沮丧。 您可以使用-subdomain开关为隧道URL指定自定义子域。 示例:打开具有子域“inconshreveable”的隧道 ngrok http -subdomain=incon
我试图将JProfiler连接到运行在服务器上的JVM,我称之为remote。这台服务器只能通过另一台我称之为middle的服务器从我的工作站(本地)访问。我将JProfiler连接到remote的计划是: > 在远程计算机上安装JProfiler仪表 从本地、中间到远程建立SSH隧道: