我正在尝试使用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) 通过Java编程语言执行scp传输的最佳方法是什么?我似乎可以通过JSSE,JSch或充气城堡java库来执行此操作.这些解决方案似乎都没有一个简单的答案.
我正在尝试使用JSch进行SFTP,但是我遇到了一些错误:
com.jcraft.jsch.JSchException:密码'aes256-cbc'是必需的,但它不可用.
以下是我使用的代码.我错过了什么吗?
JSch jsch = new JSch();
Session session = null;
jsch.addIdentity("C:\\privatekey.ppk", "Password");
session = jsch.getSession("user", "54.251.240.234", 22);
session.setConfig("StrictHostKeyChecking", "no");
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.put("C:\\Users\\test.txt", "/home/user/test.txt");
sftpChannel.exit();
session.disconnect();
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪
[8/30/13 1:56:26:556 SGT] 00000021 SystemErr R com.jcraft.jsch.JSchException: The cipher 'aes256-cbc' is required, but it is not available.
[8/30/13 1:56:26:557 SGT] 00000021 SystemErr R at com.jcraft.jsch.KeyPair.loadPPK(KeyPair.java:1017)
[8/30/13 1:56:26:557 SGT] 00000021 SystemErr R at com.jcraft.jsch.KeyPair.load(KeyPair.java:590)
[8/30/13 1:56:26:557 SGT] 00000021 SystemErr R at com.jcraft.jsch.KeyPair.load(KeyPair.java:542)
[8/30/13 1:56:26:557 SGT] …
Run Code Online (Sandbox Code Playgroud) 所以我正在编写一个需要通过SFTP连接到远程服务器的小程序,下拉文件,然后处理该文件.我在这里通过一些答案遇到了JSch,它看起来非常适合这项任务.到目前为止,易于使用,我已经让它工作,我想修复一件小事.我正在使用以下代码连接并拉下文件:
JSch jsch = new JSch();
Session session = null;
try {
session = jsch.getSession("username", "127.0.0.1", 22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword("password");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftpChannel = (ChannelSftp) channel;
sftpChannel.cd(REMOTE_FTP_DIR);
sftpChannel.lcd(INCOMING_DIR);
sftpChannel.get(TMP_FILE, TMP_FILE);
sftpChannel.exit();
session.disconnect();
} catch (JSchException e) {
e.printStackTrace();
} catch (SftpException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
所以这有效,我得到了文件.我在linux服务器上运行此代码,当我运行代码时,JSch会询问我的Kerberos用户名和密码.看起来像:
Kerberos用户名[george]:
george的Kerberos密码:
我只是输入两个问题,然后程序似乎继续没有问题.但是我需要通过cron任务自动执行此代码,所以我宁愿不让它暂停程序来问我这两个问题.有什么我不提供它,所以它不会问这个?我需要做些什么来阻止它问?希望有人有一些想法.谢谢.
如何通过SSH从Java应用程序连接到远程MySQL数据库.小代码示例对我有帮助,我很欣赏这一点.
我正在使用JSch进行sftp通信,现在我想使用方便基于密钥的身份验证,密钥由我的网络团队一次加载到客户端和服务器机器上,所有后来的通信都只是基于用户的,我们已经加载了密钥.
sftp -oPort=10022 jmark@192.18.0.246
Run Code Online (Sandbox Code Playgroud)
如 tjill@192.18.0.135
像这个命令工作正常并连接到sftp,我如何以编程方式实现此功能.
如果不可能使用JSch,请建议其他一些库.我遇到了Apache SSHD.
我试图通过ssh与JSch(0.1.44-1)连接到远程sftp服务器但在"session.connect();"期间 我得到这个例外:
com.jcraft.jsch.JSchException: Algorithm negotiation fail at
com.jcraft.jsch.Session.receive_kexinit(Session.java:529) at
com.jcraft.jsch.Session.connect(Session.java:291) at com.jcraft.jsch.Session.connect(Session.java:154)
...
Run Code Online (Sandbox Code Playgroud)
来自JSch的日志:
INFO: Connecting to xx.xx.xx.xxport 22
INFO: Connection established
INFO: Remote version string: SSH-2.0-WeOnlyDo 2.0.6
INFO: Local version string: SSH-2.0-JSCH-0.1.44
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 available.
INFO: aes256-cbc is not available.
INFO: aes192-cbc is not available.
INFO: arcfour256 is not available.
INFO: SSH_MSG_KEXINIT sent
INFO: SSH_MSG_KEXINIT received
INFO: Disconnecting from xx.xx.xx.xx port 22
Run Code Online (Sandbox Code Playgroud)
我可以使用linux sftp命令登录远程服务器.我试图在互联网上找到任何线索,但我失败了.
linux sftp命令的调试输出:
OpenSSH_5.5p1-DAM_1.2, OpenSSL 0.9.8r …
Run Code Online (Sandbox Code Playgroud) 要求是从一个服务器ssh到多个服务器并执行命令.
当我这样做时,我经常(但并非总是)在尝试从一台服务器ssh到另一台服务器时收到此异常.可能是什么原因以及如何解决?任何帮助都可能很棒.提前致谢!
jcraft.jsch.JSchException: verify: false
at jcraft.jsch.Session.connect(Session.java:309)
at jcraft.jsch.Session.connect(Session.java:162)
Run Code Online (Sandbox Code Playgroud) 我正在尝试从Jenkins ssh到本地服务器,但抛出以下错误:
[SSH] Exception:Algorithm negotiation fail
com.jcraft.jsch.JSchException: Algorithm negotiation fail
at com.jcraft.jsch.Session.receive_kexinit(Session.java:520)
at com.jcraft.jsch.Session.connect(Session.java:286)
at com.jcraft.jsch.Session.connect(Session.java:150)
at org.jvnet.hudson.plugins.SSHSite.createSession(SSHSite.java:141)
at org.jvnet.hudson.plugins.SSHSite.executeCommand(SSHSite.java:151)
at org.jvnet.hudson.plugins.SSHBuildWrapper.executePreBuildScript(SSHBuildWrapper.java:75)
at org.jvnet.hudson.plugins.SSHBuildWrapper.setUp(SSHBuildWrapper.java:59)
at hudson.model.Build$BuildExecution.doRun(Build.java:154)
at hudson.model.AbstractBuild$AbstractBuildExecution.run(AbstractBuild.java:533)
at hudson.model.Run.execute(Run.java:1754)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:89)
at hudson.model.Executor.run(Executor.java:240)
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)
SSH服务器上安装的Java版本:
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)
客户端上安装的java版本:
java version "1.8.0_25"
Java(TM) SE Runtime Environment (build 1.8.0_25-b18)
Java HotSpot(TM) 64-Bit Server VM (build 25.25-b02, mixed mode)
Run Code Online (Sandbox Code Playgroud)
还尝试了这个解决方案: JSchException:算法协商失败 但它不起作用.从腻子一切似乎都没问题.建立连接,但是当我触发Jenkins作业时,会抛出错误.我应该尝试另一个版本的ssh服务器.现在我正在使用copssh.