Как я могу запустить приложение на удаленной машине по ssh? - PullRequest
1 голос
/ 30 июня 2011

Как я могу запустить приложение на удаленной машине через ssh?

Я попытался использовать JSCH, таким образом:

    Properties props = new Properties();
    props.put("StrictHostKeyChecking", "no");

    String host = "111.111.11.111";
    String user = "myuser";
    String pwd = "mypass";
    // int port = 22;

    JSch jsch = new JSch();
    Session session = jsch.getSession(user, host);
    session.setConfig(props);
    session.setPassword(pwd);
    session.connect();

    System.out.println(session.getServerVersion());
    System.out.println("Conected!");

    // String command = "ps -ef;date;hostname";

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

    // channel.setInputStream(System.in);
    channel.setInputStream(null);

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

    InputStream in = channel.getInputStream();

    channel.connect();

, и у меня есть это:

bash: myapplication: команда не найдена

При попытке выполнить эту команду с помощью оболочки работает нормально.

Не обязательно должен быть JSCH, может быть любым.

1 Ответ

4 голосов
/ 30 июня 2011

Для будущих читателей : Как показало обсуждение, причина была в том, что JSch подключился к другому серверу, чем обычный SSH (и у одного из них был файл, а у другого - нет). Я все еще оставляю здесь свой ответ, так как он содержит некоторые полезные (я думаю) идеи отладки для подобных проблем. Но помните: Сначала убедитесь, что вы подключаетесь к нужному компьютеру .


В принципе, это способ сделать это, если вы используете JSch. Если вы получите сообщение об ошибке bash: myapplication: command not found, это означает, что в пути не было двоичного файла myapplication. (И вы получите то же сообщение об ошибке при использовании простой командной строки ssh.)

Попробуйте which myapplication (или type myapplication) в вашей обычной оболочке, чтобы увидеть, где она находится. Затем используйте echo $PATH >&2 в качестве команды, чтобы увидеть путь, используемый вашим каналом exec. Может быть, это отличается от того, когда выполняется из вашей обычной оболочки. Если это так, либо используйте полный путь в имени команды, либо исправьте настройки. (Смотрите, если путь задан в ~/.bashrc, ~/.profile, /etc/profile или /etc/bash.bashrc. Только некоторые из этих файлов будут выполняться при интерактивном входе в систему, а не при неинтерактивном входе - и я думаю, что канал exec будет не интерактивным, я думаю .)

...