我正在尝试使用Jsch在Java中建立SSH连接.我的代码产生以下异常:
com.jcraft.jsch.JSchException: UnknownHostKey: mywebsite.com.
RSA key fingerprint is 22:fb:ee:fe:18:cd:aa:9a:9c:78:89:9f:b4:78:75:b4
Run Code Online (Sandbox Code Playgroud)
我找不到如何在Jsch文档中验证主机密钥.我在下面提供了我的代码.
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
public class ssh {
public static void main(String[] arg) {
try {
JSch jsch = new JSch();
//create SSH connection
String host = "mywebsite.com";
String user = "username";
String password = "123456";
Session session = jsch.getSession(user, host, 22);
session.setPassword(password);
session.connect();
} catch(Exception e) {
System.out.println(e);
}
}
}
Run Code Online (Sandbox Code Playgroud) 如何通过SSH从Java应用程序连接到远程MySQL数据库.小代码示例对我有帮助,我很欣赏这一点.
这是我的代码,它在远程服务器上检索文件的内容并显示为输出.
package sshexample;
import com.jcraft.jsch.*;
import java.io.*;
public class SSHexample
{
public static void main(String[] args)
{
String user = "user";
String password = "password";
String host = "192.168.100.103";
int port=22;
String remoteFile="sample.txt";
try
{
JSch jsch = new JSch();
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);
BufferedReader br = new BufferedReader(new InputStreamReader(out));
String line;
while …Run Code Online (Sandbox Code Playgroud) 有没有办法实现安全的FTP org.apache.commons.net.ftp.FTPClient?
如果没有,Java的其他选项有哪些?
我下载了一个新的JSch 0.1.53库,并且JSch(sftp)下载任务不再有效.此版本在session.connect()函数抛出错误时失败Session.connect: java.io.IOException: End of IO Stream Read.
我的旧jsch.jar(2011-10-06)对同一主机工作正常,也许我错过了一个新的配置道具?
Session session=null;
ChannelSftp channel=null;
try {
JSch.setLogger(SSHUtil.createJschLogger());
JSch jsch=new JSch();
session=jsch.getSession("myuser", "11.22.33.44", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("mypwd");
session.connect(2000); // <-- FAILS HERE
channel = (ChannelSftp)session.openChannel("sftp");
channel.connect(2000);
...
Run Code Online (Sandbox Code Playgroud)
这是一个广泛的JSch日志记录,表明正在进行什么.
INFO : Connecting to 11.22.33.44 port 22
INFO : Connection established
INFO : Remote version string: SSH-2.0-OpenSSH_6.6.1
INFO : Local version string: SSH-2.0-JSCH-0.1.53
INFO : CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
INFO : aes256-ctr is not available.
INFO : aes192-ctr is not …Run Code Online (Sandbox Code Playgroud) 需要通过jumphost SSH到目标主机.曾尝试过在JSch JumpHosts示例中提到的相同内容.
Session[] sessions = new Session[2];
Session session = null;
sessions[0] = session = jsch.getSession(getUserName(), "jumphost1.com", 22);
session.setPassword(getHostPassword());
UserInfo userInfo = new UserInfo();
userInfo.setPassword(getHostPassword());
session.setUserInfo(userInfo);
Properties prop = new Properties();
prop.put("StrictHostKeyChecking", "no");
prop.put("PreferredAuthentications", "publickey,keyboard-interactive,password");
session.setConfig(prop);
session.connect();
String host = "host1.com";
int assignedPort = session.setPortForwardingL(0, host, 22);
LOGGER.info("Jump host the {} of agent {} and port forwarding {}", i, host, assignedPort);
sessions[i] = session = jsch.getSession(getUserName(), "127.0.0.1", assignedPort);
session.setPassword(getHostPassword());
userInfo = new UserInfo();
userInfo.setPassword(getHostPassword());
session.setUserInfo(userInfo); …Run Code Online (Sandbox Code Playgroud) 我不确定这是否是由于端口转发使用私钥而不是密码引起的,但这是我正在尝试做的
我需要将本地端口 3308 一直转发到我的 SQL 数据库 3306。
我可以在本地的终端中一起运行这样的事情
ssh -L 3308:localhost:3307 username@jumpbox "ssh -L 3307:mysqlDB:3306 username@server"
Run Code Online (Sandbox Code Playgroud)
或者在我的本地运行第一部分,然后在 jumpbox 上运行第二部分。两者都工作正常,我可以连接到我的 localhost:3308。
当我开始使用 JSch 时,问题就来了。这是我的代码
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);
Run Code Online (Sandbox Code Playgroud)
第一个连接已完成,但第二个连接超时。
线程“main”com.jcraft.jsch.JSchException 中的异常:java.net.ConnectException:操作超时(连接超时)
我在 JSch 或端口转发方面做错了吗?
我尝试根据说明在 Java 程序中使用 SSH 与 PythonAnywhere 中的 MySQL 库建立连接: https:
//help.pythonanywhere.com/pages/AccessingMySQLFromOutsidePythonAnywhere
不幸的是,我每次都会遇到这个错误,而且我已经没有想法了:
com.jcraft.jsch.JSchException:拒绝主机密钥:ssh.pythonanywhere.com
public static void main(String[] args) {
Tunnel tunnel = new Tunnel();
try {
tunnel.go();
} catch (Exception e) {
e.printStackTrace();
}
}
public void go() throws Exception {
String host = "ssh.pythonanywhere.com";
String user = "username";
String password = "password";
int port = 22;
int tunnelLocalPort = 9080;
String tunnelRemoteHost = "username.mysql.pythonanywhere-services.com";
int tunnelRemotePort = 3306;
JSch jsch= new JSch();
Session session = jsch.getSession(user,host,port);
localUserInfo lui = …Run Code Online (Sandbox Code Playgroud) 我需要能够从Java程序ssh到远程服务器,从那里SSH到另一台服务器.我的客户端上有两台服务器的凭据.
这些命令将作为常规字符串(无用户输入)从应用程序内自动传递.我需要能够在第二台服务器上运行这些自定义命令,并能够根据输出和一些简单的逻辑决定在运行时期间要发出什么命令.
我可以使用JSch来做到这一点,如果是的话,我应该从哪里开始研究?(例子,信息)
================================================== ===========
添加:
线程"main"中的异常com.jcraft.jsch.JSchException:UnknownHostKey:host.net.RSA密钥指纹是'blahblahblah'
到目前为止,我通过修改known_hosts文件并在那里手动添加主机来解决这个问题.我可以通过设置一个选项告诉JSch在询问这个YES-NO问题时自动按YES来绕过这个小问题吗?
我使用带有私钥的JSch到FTP文件
第3行有问题.如果没有这一行,JSch就无法运行.
我的问题是:第3行是否会使SFTP转移不安全?
我正在使用 Jsch(Jcraft) 库与 SSH 服务器建立 SSH 连接,如下所示:
JSch jsch = new JSch();
String user = "****";
String host = "****";
int port = 22;
String privateKey = "***.ppk";//Path to private key(The file is in .ppk format)
try
{
jsch.addIdentity(privateKey);
Session session = jsch.getSession(user, host, port);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
/*file transfer code*/
sftpChannel.disconnect();
session.disconnect();
}
catch (Exception e)
{
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
由于“StrictHostKeyChecking”被禁用,SSH 连接已成功建立。如果启用它,我会收到以下错误:
com.jcraft.jsch.JSchException: UnknownHostKey: ******. RSA key f …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 JSch 将文件从 Windows 机器发送到 Linux 机器。因此,我将主机公钥从 Linux 机器复制到我的 Windows 机器,并将密钥添加到我的HostKeyRepository. 但由于某种原因,我收到“无效的密钥类型”异常。这是我的代码:
HostKeyRepository repo = jsch.getHostKeyRepository();
File file = new File("D:\\Uni\\Arbeit\\ssh_host_rsa_key.pub");
byte[] HK = Files.readAllBytes(file.toPath());
Session session=jsch.getSession(user, host, 22);
session.setPassword(password);
HostKey hk = new HostKey(null, HK);
repo.add(hk, null);
session.connect();
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 JSch 连接到服务器,但它出现连接问题。我可以使用 PuTTY 连接到服务器,但不能使用 Java 代码。
我使用的是jdk1.8.0_171
这是代码片段
session = jsch.getSession(username, server, SSH_PORT);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(timeout);
session.connect(timeout);
Run Code Online (Sandbox Code Playgroud)
我收到以下异常:
session = jsch.getSession(username, server, SSH_PORT);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "no");
session.setTimeout(timeout);
session.connect(timeout);
Run Code Online (Sandbox Code Playgroud)
以下是 JSch 日志:
com.jcraft.jsch.JSchException: Algorithm negotiation fail
at com.jcraft.jsch.Session.receive_kexinit(Session.java:590)
at com.jcraft.jsch.Session.connect(Session.java:320)
Run Code Online (Sandbox Code Playgroud)
这是 pom 文件:
INFO: Connecting to <servername> port 22
INFO: Connection established
INFO: Remote version string: SSH-2.0-OpenSSH_8.0
INFO: Local version string: SSH-2.0-JSCH-0.1.54
INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256
INFO: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
INFO: CheckSignatures: ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
INFO: SSH_MSG_KEXINIT sent
INFO: SSH_MSG_KEXINIT received
INFO: kex: …Run Code Online (Sandbox Code Playgroud) jsch ×12
java ×11
ssh ×9
sftp ×4
public-key ×2
ssh-tunnel ×2
connection ×1
ftp ×1
ftp-client ×1
key-pair ×1
mysql ×1
session ×1
ssh-keys ×1
unix ×1