Связь с SSH-сервером для доступа к файлам с использованием чистой Java - PullRequest
1 голос
/ 30 августа 2011

Я пишу программу на Java с использованием сокетов для связи с сервером Telnet, который позволяет пользователям получать доступ к каталогу файлов в ОС UNIX.

При использовании Putty для связи с этим сервером он запрашивает у меня имя пользователя и пароль, но при использовании моих сокетов ничего от сервера нет, кроме строки, которая утверждает, что он использует SSH 2.0 - я думаю.

Я уверен, что это связано с протоколом Telnet, но как мне заставить сервер запросить у меня имя пользователя и пароль?Какой набор команд мне нужно дать серверу для доступа к каталогу файлов в среде UNIX?

Исправление : я подумал, что на самом деле он использует SSHчерез порт 22. Доступ к нему можно получить с помощью программы Telnet Putty или Microsoft Windows, но на самом деле он использует не протокол Telnet, а протокол SSH.

Ответы [ 3 ]

2 голосов
/ 30 августа 2011

SSH - это не telnet. SSH - это протокол, который очень похож на telnet, но зашифрован и обладает множеством других функций. Похоже, вы ожидаете простого обмена текстом, но вы получаете протокол ssh, пытающийся получить рукопожатие.

Telnet работает на порту 23, SSH на 22. Я полагаю, что вы хотите использовать 23. Примечание: Telnet старый и незашифрованный и опасный для использования через Интернет (если вы не используете VPN или что-то, что шифрует сеанс).

1 голос
/ 30 августа 2011

В большинстве случаев протокол Telnet не использует ничего ... см. эту страницу для получения подробной информации. Если сервер на другом конце пытается установить соединение SSL, что в наши дни является наиболее вероятной задачей, попробуйте использовать java.net.ssl.SSLSocket вместо чистого TCP-сокета.

Как только вы договорились о соединении (см. Документы, связанные выше), вы должны вывести команды UNIX CLI в сокет и прочитать (и проанализировать) результаты. Если вы просто хотите получить доступ к файлам, используйте вместо этого FTP. Большинство современных серверов будут поддерживать SFTP .

Редактировать

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

0 голосов
/ 30 августа 2011

Будет ли это telnet сервер, это будет просто.

Но у вас есть ssh сервер, и это хорошо, как есть.telnet сильно устарел, так как не шифруется.

Теперь у вас есть два варианта: либо использовать библиотеку ssh, либо получить доступ к клиенту командной строки ssh (или в Windows: программа plink) через его stdio.

...