我正在运行一个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) 我试图使用JSch库通过SSH协议执行多个命令.但我似乎陷入困境,无法找到任何解决方案.该setCommand()方法每个会话只能执行单个命令.但我想按顺序执行命令,就像Android平台上的connectbot应用程序一样.到目前为止我的代码是:
package com.example.ssh;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Properties;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
public class ExampleSSH extends Activity {
/** Called when the activity is first created. */
EditText command;
TextView result;
Session session;
ByteArrayOutputStream baos;
ByteArrayInputStream bais;
Channel channel;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
bais = new ByteArrayInputStream(new byte[1000]);
command = (EditText) findViewById(R.id.editText1);
result = (TextView) …Run Code Online (Sandbox Code Playgroud) 我有这个简单的Java程序,它使用Jsch连接到SFTP服务器.
连接失败,Java 1.4.2上出现"Auth fail"异常,但它在Java 1.7上完美连接.
try {
JSch jsch = new JSch();
jsch.setKnownHosts(KNOWN_HOSTS_PATH);
jsch.addIdentity(PRIVATE_KEY_PATH, PASSPHRASE);
Session session = jsch.getSession(USERNAME, HOSTNAME, 22);
session.connect(2500);
Channel channel = session.openChannel("shell");
channel.setInputStream(System. in );
channel.setOutputStream(System.out);
channel.connect();
} catch (Exception e) {
e.printStackTrace(System.err);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的ssh-rsa 4096密钥有点关键.该.pub密钥文件存在于同一目录中的私钥.
连接记录器时,我会在异常(发生channel.connect();)之前看到以下消息:
INFO: Connecting to <redacted> port 22 INFO: Connection established INFO: Remote version string: SSH-2.0-OpenSSH_5.1p1 Debian-5 INFO: Local version string: SSH-2.0-JSCH-0.1.42 INFO: CheckCiphers: aes256-ctr,aes192-ctr,aes128-ctr,aes256-cbc,aes192-cbc,aes128-cbc,3des-ctr,arcfour,arcfour128,arcfour256 INFO: arcfour is not available. INFO: arcfour128 is …
我正在使用jsch从服务器下载文件,我的代码如下.
public static void downloadFile(TpcCredentialsDTO dto) {
logger.trace("Entering downloadFile() method");
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
boolean success = false;
try {
JSch jsch = new JSch();
session = jsch.getSession(dto.getUsername(), dto.getHost(),
dto.getPort());
session.setPassword(dto.getPassword());
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
logger.info("Connected to " + dto.getHost() + ".");
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
List<String> filesToDownload = getFilesToDownload(dto,channelSftp);
if (!filesToDownload.isEmpty()) {
for (String fileDownloadName : filesToDownload) {
success = false;
OutputStream output = new FileOutputStream(
"C:\Download\BLT_03112012");
channelSftp.get("BLT_03112012",output); …Run Code Online (Sandbox Code Playgroud) 我正在尝试建立一个类,以便我可以ssh到远程服务器(我有IP,用户名和密码),然后发送一个命令,如"echo"test""然后接收输出(例如, "测试").我正在使用JSch来做这件事,但我不明白该怎么做.
import com.jcraft.jsch.*;
public class ConnectSSH {
public int execute (String command) {
JSch jsch = new JSch();
String ip = "00.00.00.00;
String user = "root";
String pass = "password";
int port = 22;
try {
Session session = jsch.getSession(user, ip, port);
session.setPassword(pass);
session.connect();
...
Run Code Online (Sandbox Code Playgroud)
我不知道该怎么做,连接后我卡住了.
任何意见是极大的赞赏.
我刚刚在新的Windows Server 2012计算机上安装了Teamcity 8.0.3.安装成功,我正在尝试配置代理以获取存储在git服务器中的项目.此服务器使用ssh密钥.我已将其添加到我的代理,但是当它尝试检索项目时,会出现此错误.
Failed for the root 'rtogit' #1: List remote refs failed: com.jcraft.jsch.JSchException: The cipher 'aes256-cbc' is required, but it is not available.
Run Code Online (Sandbox Code Playgroud)
我已经看到,例如在这里我必须改变我的政策,但我不是一个java专家,我不知道我必须做什么.
有谁可以帮助我吗?
编辑:我忘了说我已经安装了GitExtensions 2.46.
我有这个简单的构建脚本:
import org.ajoberstar.grgit.Grgit
apply plugin: 'application'
apply plugin: 'org.ajoberstar.release-opinion'
task wrapper(type:Wrapper) {
gradleVersion = '2.1'
}
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'org.ajoberstar:gradle-git:0.11.+'
}
}
release {
grgit = Grgit.open(project.file('.'))
}
Run Code Online (Sandbox Code Playgroud)
我创建了一个HelloWorld样式项目并初始化了git存储库.当我使用远程原点的目录时,我可以运行
.\gradlew.bat release
Run Code Online (Sandbox Code Playgroud)
正好.但是当我使用ssh目标作为远程原点时,我得到以下输出:
16:39:55.355 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter] Executing actions for task ':prepare'.
16:39:55.355 [INFO] [org.gradle.api.Task] Fetching changes from remote: origin
16:39:55.387 [INFO] [org.ajoberstar.grgit.auth.TransportOpUtil] The following authentication options are allowed (though they may not be available): [
HARDCODED, PAGEANT, SSHAGENT, INTERACTIVE]
16:39:55.402 [INFO] [org.ajoberstar.grgit.auth.TransportOpUtil] using interactive credentials, …Run Code Online (Sandbox Code Playgroud) 在尝试SFTP文件从Windows到Unix服务器时,我遇到了一个奇怪的问题.错误"堆栈跟踪"是 -
4: Failure
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp.checkStatus(ChannelSftp.java:2459)
at com.jcraft.jsch.ChannelSftp._sendCLOSE(ChannelSftp.java:2465)
at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:683)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475)
at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365)
Run Code Online (Sandbox Code Playgroud)
我在其他论坛上搜索了很多,但无法找到根本原因.我还观察了一件事 - 文件名,我正在尝试使用SFTP,当我将其更改为*.XML时,它是*.xml,SFTP是"成功的".非常奇怪无法确定问题.我正在尝试使用JSch Java API.但是我在尝试WinSCP前端时遇到了同样的问题.
我使用Apache Mina Sshd API在java中启动本地SFTP服务器.在SFTP客户端我使用Jcraft jsch API创建我的SFTP 客户端.我成功启动了服务器.问题是我想写一些单元测试用例到检查客户端是否可以将某些文件放入服务器的根目录.目前我的SFTP服务器没有任何根目录.所以我想知道是否有任何方法来设置服务器的根目录.
例如:C:\ sftp 如何将此路径设置为我的服务器根目录.然后,客户端每次与服务器连接时都可以读取和写入文件.谢谢.
public class SftpServerStarter {
private SshServer sshd;
private final static Logger logger = LoggerFactory.getLogger(SftpServerStarter.class);
public void start(){
sshd = SshServer.setUpDefaultServer();
sshd.setPort(22);
sshd.setHost("localhost");
sshd.setPasswordAuthenticator(new MyPasswordAuthenticator());
sshd.setPublickeyAuthenticator(new MyPublickeyAuthenticator());
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider());
sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory()));
sshd.setCommandFactory(new ScpCommandFactory());
try {
logger.info("Starting ...");
sshd.start();
logger.info("Started");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.info("Can not Start Server");
}
}
}Run Code Online (Sandbox Code Playgroud)
在我的Android应用程序中,我正在使用LibVLC库显示实时视频流.要连接SSH服务器,我使用过jsch库.
当我运行应用程序时,会话连接视频正常运行后.当我最小化应用程序3-4分钟,并再次恢复仍然视频运行正常.但是当我将应用程序最小化10分钟或更长时间并在恢复时它会显示session timeout消息.
OnResume()我试图创建会话createPlayer()但仍然没有工作.
我试过改变会话连接时间.
有没有办法避免会话超时很长一段时间,如30分钟.
//**编辑后**//
在onResume()会话仍然连接后我检查了,错误日志说Connection reset by peer.
那是什么意思?ssh隧道是关闭的吗?如果是,如何检查ssh隧道状态?
错误日志:
十月8日至9日:52:15.268 6529-21339/com.compdigitec.libvlcandroidsample E/VLC:LIVE555 DEMUX:无法使用RTSP连接://本地主机:8554/video.ts十月8日至9日:52:15.268 6529-21339 /com.compdigitec.libvlcandroidsample d/VLC:核心解复用:没有access_demux模块匹配10月八日至九日:52:15.268 6529-21339/com.compdigitec.libvlcandroidsample d/VLC:核心输入:创建访问 'RTSP' 位置='本地主机:8554/video.ts',path ='(null)'08-09 10:52:15.268 6529-21339/com.compdigitec.libvlcandroidsample D/VLC:核心访问:寻找匹配"rtsp"的访问模块:15名候选人十月8日至9日:52:15.268 6529-21339/com.compdigitec.libvlcandroidsample d/VLC:核心接入:净:连接到本地主机端口8554 10月8日至九日:52:15.278 6529-21339/com.compdigitec.libvlcandroidsample d/VLC:核心访问:连接成功(socket = 36)08-09 10:52:35.823 6529-21339/com.compdigitec.libvlcandroidsample E/VLC:核心访问:读取错误:连接重置由对等08-09 10:52: 35.823 6529-21339/com.compdigitec.libvlcandroidsample D/VLC :access_realrtsp访问:RTSP连接十月8日至9日:52:35.823 6529-21339/com.compdigitec.libvlcandroidsample W/VLC:access_realrtsp访问:支持现在十月8日至9日唯一真正/螺旋RTSP服务器:52:35.823 6529-21339 /com.compdigitec.libvlcandroidsample d/VLC:核心接入:没有访问模块相匹配10月8日至9日:52:35.823 6529-21339/com.compdigitec.libvlcandroidsample E/VLC:核心输入:开放的rtsp的://本地主机:8554 /video.ts'失败10月8日至9日:52:35.823 6529-21339/com.compdigitec.libvlcandroidsample E/VLC:核心输入:您的输入无法打开10月8日至9日:52:35.823 6529-21339/COM .compdigitec.libvlcandroidsample E/VLC:核心输入:VLC无法打开MRL'rtsp:// localhost:8554/video.ts'