Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSH连接_Java_Mysql_Ssh - Fatal编程技术网

Java SSH连接

Java SSH连接,java,mysql,ssh,Java,Mysql,Ssh,如何从Java桌面应用程序连接到internet服务器?我需要访问MySQL数据库并上传/下载文件。我拥有的主机(one.com)不支持远程数据库访问,因此我尝试使用SSH。我对此一无所知。我尝试过各种代码示例,但没有一个比连接更容易通过。我将jsch.jar添加到我的项目中。是否还有其他需要添加/安装的内容或缺少的内容 public static void main(String args[]) { String user = "user"; String pa

如何从Java桌面应用程序连接到internet服务器?我需要访问MySQL数据库并上传/下载文件。我拥有的主机(one.com)不支持远程数据库访问,因此我尝试使用SSH。我对此一无所知。我尝试过各种代码示例,但没有一个比连接更容易通过。我将jsch.jar添加到我的项目中。是否还有其他需要添加/安装的内容或缺少的内容

    public static void main(String args[])
    {
    String user = "user";
    String password = "pass";
    String host = "00.000.00.000";
    int port=22;

String remoteFile="/home/mywebsite.com/test.txt";

try
    {
    JSch jsch = new JSch();
    Session session = (Session) jsch.getSession(user, host, port);
        session.setPassword(password);
        session.setConfig("StrictHostKeyChecking", "no");
    System.out.println("Establishing Connection...");
    session.connect();
        System.out.println("Connection established.");
    System.out.println("Creating SFTP Channel.");
    ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
    sftpChannel.connect();
    System.out.println("SFTP Channel created.");


    InputStream out= null;
    out= sftpChannel.get(remoteFile);
    try (BufferedReader br = new BufferedReader(new InputStreamReader(out)))     {
        String line;
        while ((line = br.readLine()) != null)
            System.out.println(line);
    }
    }
catch(JSchException | SftpException | IOException e){System.err.print(e);}
}
我得到一个错误:

com.jcraft.jsch.JSchException: java.net.ConnectException: Connection timed out: connect
BUILD SUCCESSFUL (total time: 24 seconds)
或者,为了实现与我的站点和数据库的远程连接,我还有什么其他选择

p.S.我尝试了stackoverflow中的几乎所有示例代码,但都被困在同一点上


谢谢大家!

连接超时
表示您正试图连接到端口22上不接受SSH连接的服务器,或者您的主机不正确。是
host=“00.000.00.000”您试图连接的实际IP地址,或者您是否因堆栈溢出问题而更改了它?

我不打算调试您的代码,但会告诉您如何完成此操作

解决方案是使用SSH“端口转发”,在将其嵌入Java代码之前,您应该首先从命令行设置它,以了解它是如何工作的。如果命令行隧道就足够了,您可能不需要编写任何代码

ssh -L3306:localhost:3306 <databaseHost>
对于返回的数据包,这个过程是反向的,由本地ssh客户端和远程sshd守护进程管理

请注意,这可以用于更有趣的情况。例如,假设远程ssh服务器和数据库服务器位于同一防火墙后面的不同系统上。假设ssh主机显示为gateway.xyz.com,而数据库主机位于10.0.0.3的内部LAN上,该LAN不能从Internet访问,但可以从网关访问

ssh -L3306:10.0.0.3:3306 gateway.xyz.com
然后,分组路由是

Your computer 3306
Received by ssh
Encryption and sent to gateway.xyz.com
Decrypted by sshd forwarded to 10.0.0.3:3306
Received at 10.0.0.3:3306 by MySQL

需要明确的是,这是在执行Java代码之前从命令行设置的,应该在与ssh命令不同的会话中进行。只要ssh命令在运行,隧道就会保持可用。

这不是我真正的IP地址。。。我更改了它,比如用户和密码,原因很明显…:)
Your computer 3306
Received by ssh
Encryption and sent to gateway.xyz.com
Decrypted by sshd forwarded to 10.0.0.3:3306
Received at 10.0.0.3:3306 by MySQL