标签: jsch

jsch ChannelExec运行.sh脚本,nohup"丢失"一些命令

我有一个.sh脚本,它粘合了许多其他脚本,由Windows应用程序中的jsch ChannelExec调用.

Channel channel = session.openChannel("exec");

((ChannelExec) channel).setCommand("/foo/bar/foobar.sh");

channel.connect();
Run Code Online (Sandbox Code Playgroud)

如果我运行像"nohup /foo/bar/foobar.sh >> /path/to/foo.log&"这样的命令,那么所有长期工作(数据库操作,文件处理等)似乎都会丢失.

检查日志文件,只查找那些回声填充(长期操作之前和之后,计算运行时间等).

我检查了权限,$ PATH,将源/ etc/profile添加到我的.sh但这些都没有.

但是当我正常运行命令(同步运行,在Windows上将所有回显输出打印到我的java客户端)时,所有事情都顺利进行.

这是一个非常具体的问题.希望有经验的人可以帮助我.

预先感谢.

ssh exec jsch nohup

2
推荐指数
1
解决办法
5469
查看次数

我可以将 JSch 配置为在连接失败时自动重新连接吗?

我正在使用Java的JSch API 进行 SFTP 连接。有时服务器可能会关闭一秒钟或连接可能很忙。在这些情况下,在我确定连接失败之前,我至少需要重新连接到服务器 3 次。

JSch 是否提供任何配置选项来自动执行此操作?

java sftp jsch

2
推荐指数
1
解决办法
3274
查看次数

使用ChannelSftp进行文件传输时保留上次修改日期

我正在使用ChannelSftp(jsch-0.1.42.jar)从unix服务器复制文件,并且可以成功完成,但最后修改日期会被当前时间覆盖.

我正在使用chanSftp.get(nextName,"C:/ Test /"+ nextName);

有没有办法在本地副本上保留远程文件的上次修改时间?

我有使用的远程文件的最后修改时间

attrs = lsEntry.getAttrs();

日期modDate =(Date)format.parse(attrs.getMtimeString());

jsch

2
推荐指数
1
解决办法
1万
查看次数

JSchException:UnknownHostKey

我正在尝试使用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)

java ssh jsch

2
推荐指数
1
解决办法
2万
查看次数

如何使用JSch判断SFTP上传是否成功

不幸的是,该getExitStatus()方法总是返回-1所以我不能用它来告诉我文件上传是否有效.我试图用getInputStream()的方法Channel类,但每当我试图从InputStream我的代码阻止永远读仿佛Channel实例还开着/连接(即使isConnectedisClosed()分别为虚假和真实的-这表明通道确实是封闭的) .我尝试从输入流中读取一个数据字节后,以下代码总是阻塞:

public class Put {

public static void main(String[] args) throws IOException {

    Session session = null; 
    Channel channel = null; 
    ChannelSftp channelSftp = null; 
    InputStream in = null; 
    JSch jsch = new JSch();

    try {
        jsch.setKnownHosts("known_hosts");
        session = jsch.getSession("user", "host", 22);
        session.setPassword("password");

        session.connect();
        channel = session.openChannel("sftp");
        channel.setInputStream(null);
        stdout = channel.getInputStream();

        channel.connect();
        channelSftp = (ChannelSftp)channel;
        channelSftp.cd("/path/to/sftp");


        channelSftp.put("/path/to/localfile", "/path/to/remotefile");

    } catch (JSchException e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    } catch …
Run Code Online (Sandbox Code Playgroud)

java sftp jsch

2
推荐指数
1
解决办法
5097
查看次数

在 JSch 中使用 2048 位素数

我试图尝试从我的 Java 应用程序到客户端的外部服务器的 SSH 连接。客户端增强了安全性,他们不接受 1024 位素数,但我的 JSch 只发送 1024 位素数。

请在下面的我的应用程序中找到详细的错误输出:

INFO  |: Launching [sftp] handler
INFO  |: Creating SFTP session to host [server1] with logger for JSch
INFO  |: Connecting via public/private key.
INFO  |: Session created.
INFO  |: Connecting to server1 port 22
INFO  |: Connection established
INFO  |: Remote version string: SSH-2.0-VShell_4_1_1_862 VShell
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  |: CheckKexes: diffie-hellman-group14-sha1,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521
INFO  |: SSH_MSG_KEXINIT sent
INFO  |: SSH_MSG_KEXINIT received
INFO …
Run Code Online (Sandbox Code Playgroud)

java encryption ssh cryptography jsch

2
推荐指数
1
解决办法
3577
查看次数

当使用JSch通过Java执行时,某些Unix命令失败并显示"... not found"

我有一段连接到Unix服务器并执行命令的代码.

我一直在尝试简单的命令,他们工作正常.

我能够登录并获得命令的输出.

我需要通过Java运行Ab-initio图.

我正在使用此air sandbox run graph命令.

当我使用SSH客户端登录并运行命令时,它运行正常.我能够运行图表.但是,当我尝试通过Java运行命令时,它会给我一个"未找到空气"的错误.

对JSch支持的Unix命令有什么限制吗?

知道为什么我无法通过我的Java代码运行命令吗?

这是代码:

public static void connect(){
    try{
      JSch jsch=new JSch();  

      String host="*****";
      String user="*****";
      String config =
                "Host foo\n"+
                "  User "+user+"\n"+
                "  Hostname "+host+"\n";

      ConfigRepository configRepository =
            com.jcraft.jsch.OpenSSHConfig.parse(config);

      jsch.setConfigRepository(configRepository);
      Session session=jsch.getSession("foo");

      String passwd ="*****";
      session.setPassword(passwd);
      UserInfo ui = new MyUserInfo(){

          public boolean promptYesNo(String message){

            int foo = 0;
            return foo==0;
          }
      };
      session.setUserInfo(ui);
      session.connect();

      String command="air sandbox run <graph-path>";

      Channel channel=session.openChannel("exec");
      ((ChannelExec)channel).setCommand(command);

      channel.setInputStream(null);

      ((ChannelExec)channel).setErrStream(System.err);

      InputStream …
Run Code Online (Sandbox Code Playgroud)

java unix ssh shell jsch

2
推荐指数
1
解决办法
1691
查看次数

在 android 上通过 JSCH 的基本 SSH 连接

正如来自这个问题和本教程的用户所解释的那样,我正在尝试设置一个简单的 ssh 连接以在应用程序上执行单个命令。它甚至不需要等待任何响应。

这是代码:

主要活动:包 com.example.lucas.shutdown;

import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void onCLick(View v){
        new AsyncTask<Integer, Void, Void>(){
            @Override
            protected Void doInBackground(Integer... params) {
                try {
                    executeRemoteShutdown();
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return null;
            }
        }.execute(1);
    }

    public void executeRemoteShutdown(){
        String user = "ssh";
        String password = …
Run Code Online (Sandbox Code Playgroud)

ssh android jsch

2
推荐指数
1
解决办法
6722
查看次数

使用 SFTP JSch 库可以上传多部分文件吗?

我想上传一个非常大的文件,它的大小可以是1 GB。是否可以将其上传或下载到/从 SFTP 服务器?我正在使用 JSch 库。

java sftp jsch

2
推荐指数
1
解决办法
1515
查看次数

SftpChannel.rename 失败但 mv 命令有效。可能的原因是什么?

我遇到了这个问题,其中 sftpChannel.rename 失败,错误不是很有帮助,我想不出原因。目标中不存在文件。权限很好,因为 mv 命令有效。我将列出文件和文件夹的权限。有人有任何想法吗?我不必使用该目录,但不知道为什么会失败令人沮丧。

这是一段测试代码。RemoteFile 只是 sftpChannel 的包装器,因此我可以检查文件/目录是否存在并在必要时删除文件或创建目录:

 String file = "/u01/apps/tpms/applstg2/ken_test/TestFile";
 String destDir = "/usr/local/jboss/server/applstg2/backup/"; // Caused by: 4: Failure
 //String destDir = "/u01/apps/tpms/applstg2/ken_test/backup/"; // Success
 RemoteFile remoteFile = new RemoteFile(file, ssh.openSftpChannel());
 remoteFile.rename(destDir + "/TestFile");
Run Code Online (Sandbox Code Playgroud)

这是失败的行:

sftpChannel.rename(file, newName);
Run Code Online (Sandbox Code Playgroud)

这是跟踪(我删除了所有 JUnit 和 sun.reflect 跟踪):

Error renaming file /u01/apps/tpms/applstg2/ken_test/TestFile to /usr/local/jboss/server/applstg2/backup//TestFile
at com.framework.remote.RemoteFile.rename(RemoteFile.java:82)
at com.framework.remote.RemoteFileTest.renameFile(RemoteFileTest.java:56)
Caused by: 4: Failure
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1923)
at com.framework.remote.RemoteFile.rename(RemoteFile.java:79)
Run Code Online (Sandbox Code Playgroud)

权限:

drwxrwxr-x  2 applstg2 applstg2   4096 May  2 22:09 ken_test
-rw-rw-r-- 1 applstg2 applstg2 61595086 …
Run Code Online (Sandbox Code Playgroud)

java sftp jsch file-rename file-move

2
推荐指数
1
解决办法
841
查看次数

标签 统计

jsch ×10

java ×7

ssh ×5

sftp ×4

android ×1

cryptography ×1

encryption ×1

exec ×1

file-move ×1

file-rename ×1

nohup ×1

shell ×1

unix ×1