Вы инициируете соединение, поэтому для того, чтобы оно было отклонено, это означает, что машина, на которую вы пытаетесь подключиться по 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-программа пытается подключиться к другому компьютеру, на котором не работает защищенный сервер оболочки.
В любом случае, кажется, что вам придется немного отладить, чтобы изолировать, является ли это настоящей проблемой кодирования или проблемой окружающей среды.