我正在运行一个java程序,我使用Java SFTP将文件从一个文件夹传输到另一个文件夹.我遇到的问题是我在Java SFTP中遇到以下错误(使用JSch):
C:\ Oracle\Middleware\Oracle_Home\oracle_common\jdk\bin\javaw.exe -server -classpath C:\ JDeveloper\mywork\Java_Hello_World.adf; C:\ JDeveloper\mywork\Java_Hello_World\Client\classes; C:\ Users\ADMIN\Downloads\jsch-0.1.53.jar -Djavax.net.ssl.trustStore = C:\ Users\IBM_AD~1\AppData\Local\Temp\trustStore5840796204189742395.jks FileTransfer com.jcraft.jsch.JSchException:UnknownHostKey: 127.0.0.1.RSA密钥指纹是a2:39:3f:44:88:e9:1f:d7:d1:71:f4:85:98:fb:90:dc at com.jcraft.jsch.Session.checkHost(Session.java: 797)at com.jcraft.jsch.Session.connect(Session.java:342)at com.jcraft.jsch.Session.connect(Session.java:183)at FileTransfer.main(FileTransfer.java:33)进程退出时退出代码0.
以下是我目前的代码:
FileTransfer fileTransfer = new FileTransfer();
JSch jsch = new JSch();
try {
String host = "127.0.0.1";
int port = 22;
String user = "user";
Session session = jsch.getSession(user, host, port);
session = jsch.getSession("username", "127.0.0.1", 22);
session.connect(); // bug here , java.net.ConnectException
ChannelSftp sftp = null;
sftp = (ChannelSftp)session.openChannel("sftp") ; //channel;
//extra config code …Run Code Online (Sandbox Code Playgroud) 我正在使用jgit安全地访问GitHub中的存储库.我做了以下操作来生成GitHub和我的客户端代码之间的安全通信密钥.
生成密钥对:
ssh-keygen -t rsa
Run Code Online (Sandbox Code Playgroud)使用帐户设置 - > SSH密钥 - >添加SSH密钥,将公钥添加到GitHub帐户
将步骤1中生成的私钥添加到本地主机:
ssh-add id_rsa
Run Code Online (Sandbox Code Playgroud)执行此操作后,当我尝试访问GitHub并进行克隆时,我仍然会收到以下错误:
org.eclipse.jgit.api.errors.TransportException: git@github.com:test/test_repo.git: UnknownHostKey: github.com. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:137)
at org.eclipse.jgit.api.CloneCommand.fetch(CloneCommand.java:178)
at org.eclipse.jgit.api.CloneCommand.call(CloneCommand.java:125)
Run Code Online (Sandbox Code Playgroud)
这是我使用的代码:
String localPath, remotePath;
Repository localRepo;
Git git;
localPath = <path_to_local_repository>;
remotePath = "git@github.com:test/test_repo.git";
try {
localRepo = new FileRepository(localPath + "/.git");
} catch (IOException e) {
e.printStackTrace();
}
git = new Git(localRepo);
CloneCommand cloneCmd = git.cloneRepository().
setURI(remotePath).
setDirectory(new File(localPath));
try {
cloneCmd.call();
} catch (GitAPIException e) {
log.error("git clone …Run Code Online (Sandbox Code Playgroud) 使用带有gitolite的jgit进行源代码控制,我有一个应用程序可以根据命令生成某些代码,我们希望将其提交给源代码控制.目标是快速前进,提交新代码,然后推送它.
我有以下方法:
private void commitToGitRepository(String updateComment, Config config)
throws IOException, NoFilepatternException, GitAPIException
{
if(git == null)
{
git = Git.open(new File(config.getDpuCheckoutDir()));
}
PullCommand pull = git.pull();
pull.call();
}
Run Code Online (Sandbox Code Playgroud)
此方法在pull.call()方法调用上失败,但有以下异常:
com.jcraft.jsch.JSchException: UnknownHostKey: www.somehost.com. RSA key fingerprint is 9d:92:a9:c5:5d:cb:5f:dc:57:ff:38:7e:34:31:fe:75
at com.jcraft.jsch.Session.checkHost(Session.java:748)
at com.jcraft.jsch.Session.connect(Session.java:319)
at org.eclipse.jgit.transport.JschConfigSessionFactory.getSession(JschConfigSessionFactory.java:116)
at org.eclipse.jgit.transport.SshTransport.getSession(SshTransport.java:121)
at org.eclipse.jgit.transport.TransportGitSsh$SshFetchConnection.<init>(TransportGitSsh.java:248)
at org.eclipse.jgit.transport.TransportGitSsh.openFetch(TransportGitSsh.java:147)
at org.eclipse.jgit.transport.FetchProcess.executeImp(FetchProcess.java:136)
at org.eclipse.jgit.transport.FetchProcess.execute(FetchProcess.java:122)
at org.eclipse.jgit.transport.Transport.fetch(Transport.java:1104)
at org.eclipse.jgit.api.FetchCommand.call(FetchCommand.java:128)
at org.eclipse.jgit.api.PullCommand.call(PullCommand.java:245)
at net.intellidata.dpu.controller.schema.EntityMappingController.commitToGitRepository(EntityMappingController.java:149)
... (truncated where it meets my code)
Run Code Online (Sandbox Code Playgroud)
我读这个的方式,似乎它没有找到我的known_hosts文件user_home/.git.但是,我一直在寻找一个小时,我没有找到一种方法来配置JGit告诉JSch在哪里查找known_hosts文件.
建议?我知道origin的条目存在于我的known_hosts文件中
有关此异常的问题有两个:
我正在使用Windows机器并尝试连接到使用运行Ubuntu的Vagrant创建的VM.这是我的代码:
public static void main(String[] args) {
String host = "localhost";
String username = "vagrant";
int port = 2200;
String privateKey = "C:\\keys\\openSSH_pair1\\open_ssh_private";
JSch js = new JSch();
try {
js.addIdentity(privateKey, "pass");
js.setKnownHosts("C:\\Users\\user\\.ssh\\known_hosts");
Session session = js.getSession(username, host, port);
session.connect();
System.out.println("Connected");
} catch (JSchException e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
@Pascal建议设置strictHostKeyChecking为no,对我有用,但这不是首选的解决方案.他首选的解决方案是从命令行进行SSH,以便将主机添加到known_hosts文件中.我已经安装并执行了Git ssh -i openSSH_pair1\open_ssh_private vagrant@localhost -p 2200
并收到此输出,然后被提示输入密码并建立连接
无法建立主机'[localhost]:2200([127.0.0.1]:2200)'的真实性.ECDSA密钥指纹是11:5d:55:29:8a:77:d8:08:b4:00:9b:a3:61:93:fe:e5.您确定要继续连接(是/否)吗?是警告:永久性地将'[localhost]:2200'(ECDSA)添加到已知主机列表中.
所以现在我的known_hosts文件git_home\.ssh包含一个条目localhost:2200,我也把known_hosts文件放入user_home\.ssh.我还把我的私钥放在VM上我试图ssh并运行它来生成一个公钥并将其添加到authorized_keys …
我正在尝试使用Jsch在Java中建立SSH连接.我已将"StrictHostKeyChecking"设置为yes.据我所知,必须事先获取服务器的主机密钥,并在第一次尝试连接服务器之前存储在hostkey文件中.如何获取服务器的HostKey.我的代码产生以下异常:
com.jcraft.jsch.JSchException:UnknownHostKey:ASY-PC RSA密钥指纹是22:fb:ee:fe:18:cd:aa:9a:9c:78:89:9f:b4:78:75:b4
如何与StrictHostKeyChecking建立连接是的.这是我的代码.
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;
try
{
JSch jsch = new JSch();
Session session = jsch.getSession(user, host, port);
session.setPassword(password);
session.setConfig("StrictHostKeyChecking", "yes");
System.out.println("Establishing Connection...");
session.connect();
System.out.println("Connection established.");
System.out.println("Crating SFTP Channel.");
ChannelSftp sftpChannel = (ChannelSftp) session.openChannel("sftp");
sftpChannel.connect();
}catch(Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud) 我明白有重复的>>>从副本中复制>>>只要您的本地机器有一台运行<<<<<的SSH服务器,但我无法发表评论,也不能从问题中解决(并且我没有提供答案. ...)
它声明"只要您的本地计算机运行SSH服务器",但我不知道如何运行SSh服务器.我打开我的腻子(双击它)(不确定这是否意味着SSH(?Putty?)服务器(?)正在运行...怀疑...
我是套接字编程的新手.我正在利用JSch(http://www.jcraft.com/jsch/)尝试连接到远程服务器(后期阶段),这是我使用的代码,我试图连接到我的本地计算机和执行命令(确切地说是ls)来进行测试.但是,我一直拒绝连接.我用谷歌搜索,我注意到有一些文章提到"有服务器监听",但我不知道它意味着什么.请查看我的代码如下.
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import com.jcraft.jsch.*;
class SwingWorkerExample {
JTextField hostField;
JTextField userNameField;
JTextField passwordField;
JPanel panel;
public SwingWorkerExample() {
JPanel p = panel = new JPanel(new GridLayout(0,2));
hostField = new JTextField(20);
userNameField = new JTextField(20);
passwordField = new JPasswordField(20);
JButton testButton = new JButton("connect!");
testButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
testConnectionButtonActionPerformed(ev);
}
});
p.add(new JLabel("host:"));
//127.0.0.1
p.add(hostField);
p.add(new JLabel("user:"));
//mycomputerusername
p.add(userNameField); …Run Code Online (Sandbox Code Playgroud)