В соответствии с часто задаваемыми вопросами Ganymed (http://www.ganymed.ethz.ch/ssh2/FAQ.html), вам не разрешено отправлять более одной команды на каждый сгенерированный вами объект Session. Именно так SSH-2 явно хочет, чтобы вы справились с этим. Вы можете выбрать один из двух вариантов: объединить две команды, такие как
session.execCommand("cd /root/somedir ; ls .");
Однако это не всегда работает и становится очень уродливым, если у вас больше пары команд. Другой способ сделать это - открыть сеанс интерактивной оболочки и записать команды в стандартный. Это может выглядеть примерно так:
Session sess = conn.openSession();
sess.requestDumbPTY();
sess.startShell();
OutputStream os = sess.getStdin();
os.write("cd /root/somedir\n".getBytes());
os.write("ls -1\n".getBytes());
os.write("exit\n".getBytes());
InputStream stdout = new StreamGobbler(sess.getStdout());
BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
//TODO
Обратите внимание на использование команды заключительного выхода. Так как это обрабатывается как окно терминала, если вы не выйдете из программы, любой цикл, который вы читаете с выхода сервера, никогда не прекратится, потому что сервер будет ожидать больше ввода