Java Exec или время выполнения не работает с SSH - PullRequest
0 голосов
/ 05 июля 2011

Я пытаюсь войти в Ubuntu с помощью exec, но по какой-то причине, когда я выполняю код, я получаю сообщение об ошибке порт 22: соединение отклонено

В коде, который я использую concat, чтобы соединить строки, но я знаю, что они собраны правильно, потому что я распечатываю их, и если я копирую и вставляю их в командную строку, тогда это будет ssh правильно. Мой код пытается:

p1= Runtime.getRuntime().exec(run1);
p1.waitfor();

, где

run1 = "ssh -o StrictHostKeyChecking=no -v -i key " + "ubuntu@"+ DNS + " sudo mke2fs -F -j "+device;

Есть идеи?

Ответы [ 2 ]

1 голос
/ 05 июля 2011

Вы инициируете соединение, поэтому для того, чтобы оно было отклонено, это означает, что машина, на которую вы пытаетесь подключиться по ssh, отказывает вам в доступе по ssh.

Войдите на эту машину любыми имеющимися у вас средствами и убедитесь, что сервер ssh работает. Если это так, то убедитесь, что межсетевой экран не блокирует порт 22; потому что иногда ssh-сервер работает, но брандмауэр не разрешает сетевой доступ к ssh-серверу из-за правила блокировки портов.

--- Отредактировано после вопроса в комментариях ---

Is there a difference between ssh in the command line and using exec? Because I can 
connect to the server through the command line, which I assume is still using port 22. 
So if I can ssh that way does that mean port 22 is working?

Есть несколько возможностей. Java поставляется с Security Manager, который служит только для запрета программам доступа к ресурсам машины. Вот почему можно безопасно запускать код апплета, который загружается с удаленных серверов, так как Security Manager отказывает в разрешении на доступ к жесткому диску или подключению к другим машинам. В изолированной программной среде апплета он разрешает соединения обратно на исходный веб-сервер (чтобы загрузить больше кода и изображений).

Однако отсутствие исключения безопасности устраняет подозрения от диспетчера безопасности. Тот факт, что в сообщении используются слова «Отказано в соединении», является сильным показателем того, что сервер SSH, к которому вы подключаетесь, не будет принимать соединение от вас.

Возможно, работая в командной строке, команда ssh использует другую среду или конфигурацию. Я хотел бы увидеть, если команда является псевдонимом, если ssh-соединение делает некоторые предположения о парах ключей. Если кажется, что с командой ничего не совпадает, я бы проверил, что ваша программа подключена к ssh версии 2 (многие не допускают версию 1 из-за дыры в безопасности).

Тогда я бы тоже охотился за возможными различиями в разрешении имен. Возможно, вы разрешаете имя хоста в командной строке иначе, чем разрешение из программы Java. Это может означать, что Java-программа пытается подключиться к другому компьютеру, на котором не работает защищенный сервер оболочки.

В любом случае, кажется, что вам придется немного отладить, чтобы изолировать, является ли это настоящей проблемой кодирования или проблемой окружающей среды.

0 голосов
/ 05 июля 2011

Если вы получаете отказано в соединении, SSHD не работает или блокируется брандмауэром (или аналогичным образом).

...