Кто-нибудь может порекомендовать сервер Java FOSS, который выполняет все типичные протоколы (SSH и т. Д.) - PullRequest
1 голос
/ 22 февраля 2010

Я хотел бы добавить возможность пользователям подключаться по telnet к моему приложению, чтобы они могли вводить команды и т. Д. Мне нужен простой сервер Java Telnet, с помощью которого я могу предоставить стратегию аутентификации.

Под "telnet" я имею в виду не то, что lib обеспечивает подключение через telnet, а нечто большее. Я хочу, чтобы скучный протокол выполнялся вместе с оболочкой, имеющей хуки, которые я могу использовать для обработки и выполнения командных строк. Где или что эти команды, конечно, моя реализация.

Этот вопрос не о том, как запустить сервер сокетов или другой тип протокола.

Ответы [ 3 ]

1 голос
/ 22 февраля 2010

По моему опыту, telnet - это telnet, ssh - это ssh ... если вы хотите последнее, вы можете посмотреть что-то вроде: http://mina.apache.org/sshd/

Хотя я никогда не использовал его.

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

... но ssh был бы более безопасным и более простым.

0 голосов
/ 19 июня 2010

Что именно вы подразумеваете под "telnet в мое приложение, где они могут вводить команды и т. Д."?

Поскольку и для telnet, и для ssh требуется, чтобы какое-либо приложение запускалось на удаленной машине (чаще всего это экземпляр командной оболочки), они действительно предоставляют только транспортный механизм для команд. В частности, Telnet может (и был) злоупотреблен посылать общие текстовые команды по TCP-соединению. Вы можете просматривать веб-страницы с помощью команды telnet www.target-domain.com 80 и вручную вводить все данные протокола HTTP, но я бы не рекомендовал это делать. ssh точно такой же, хотя он добавляет безопасность ssl / tls к каналу.

Поэтому, я думаю, вы хотите что-то вроде этого:

import java.io.*;
import java.net.*;

public class telnettest {
    public static void main(String[] args) throws IOException {

        Socket echoSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;

        try {
            //Open a listening socket on port 8022 and wait for a connection
            echoSocket = new ServerSocket(8022).accept();
            System.out.println("connection established");

            //Get input and output streams
            out = new PrintWriter(echoSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                        echoSocket.getInputStream()));
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for "
                    + "the connection");
            System.exit(1);
        }

        //Read lines from the input stream (corresponding to user commands)
        String userInput;
        while ((userInput = in.readLine()) != null) {

            //For each line entered, just output it to both remote and local terminal
            out.println("echo: " + userInput);
            System.out.println("echo: " + userInput);
        }

        //Clean up connections.
        out.close();
        in.close();
        echoSocket.close();
    }
}

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

Я не уверен насчет входа в систему через ssh, но я подозреваю, что вы можете получить его, используя javax.net.ssl.SSLServerSocket вместо ServerSocket.

Осталось сделать что-то разумное с пользовательским вводом, вместо того, чтобы просто бросить его обратно в их лица. В зависимости от количества команд и их параметров вы можете выполнить синтаксический анализ команды самостоятельно или найти библиотеку, которая ее обрабатывает.

0 голосов
/ 22 февраля 2010

Серверы Telnet делают только telnet.

Вы можете найти http://telnetd.sourceforge.net/ подходящим.

"Целевая аудитория: Разработчики, которые хотят интегрировать разумный доступ telnet в свое приложение. "

...