Использование JCraft Jsch - выполнение команды sshpass не выполнено

Необходимо установить удаленный SSH на машину2 с машины1. Попытка кода ниже с использованием ssh.but не успешно. Выполнить команду создания файла до и после запроса sshpass для проверки. файл создан в Machine1, но не работает в Machine2. Пожалуйста, помогите. Есть ли другие варианты

String Cl_samp= new String("sshpass -p "xxxx" ssh -o StrictHostKeyChecking=no root@XXX.XX.115.71");
try{    
        java.util.Properties config = new java.util.Properties(); 
        config.put("StrictHostKeyChecking", "no");
        JSch jsch = new JSch();

        Session session_r=jsch.getSession(user, XXX.XX.115.70, 22);
            session_r.setConfig("StrictHostKeyChecking", "no");
        session_r.setPassword(password);
        session_r.setConfig(config);
        session_r.connect();
        ChannelExec(session_r, "ls -la >>result.txt")
        ChannelExec(session_r, Cl_samp);
        ChannelExec(session_r, "ls -la >>result.txt")
        session_r.disconnect();
        System.out.println("DONE");

        }catch(Exception e){
        e.printStackTrace();
    }
private void ChannelExec(Session session_1, String Serv_cmd) throws IOException{

    try {
        Channel channel;
        channel = session_1.openChannel("exec");
        ((ChannelExec)channel).setCommand(Serv_cmd);
        channel.setInputStream(null);
        ((ChannelExec)channel).setErrStream(System.err);
        channel.connect();
        System.out.print("Server-"+"command:"+Serv_cmd+" \n");
        channel.disconnect();           
        } catch (JSchException ex) {
            Logger.getLogger(ContactEditorUI.class.getName()).log(Level.SEVERE, null, ex);
        }

   }   

1 ответ

ChannelExec(session_r, "ls -la >>result.txt")
ChannelExec(session_r, Cl_samp);
ChannelExec(session_r, "ls -la >>result.txt")

Каждый созданный вами канал будет работать независимо от других. В общем случае (создание ssh-соединения с сервером Unix) каждый канал будет вызывать отдельный экземпляр оболочки, который запускает указанную вами команду и затем завершает работу. Бег ssh на одном канале не повлияет на последующие команды, запущенные на разных каналах.

Чтобы вызвать ssh на втором хосте и заставить его выполнить команду на третьем хосте, вам нужно выполнить все это через один канал exec, что-то вроде этого:

String Cl_samp= "sshpass -p '...' ssh -o ... root@... 'ls -la >>result.txt'";
ChannelExec(session_r, Cl_samp);

Это добавляет команду, которая будет вызвана ssh командная строка, которая заставляет ssh (запущенный на втором хосте) запрашивать выполнение команды на третьем хосте.

Другие вопросы по тегам