Как настроить обратный Telnet в Mac OS X

7

Я пытаюсь настроить обратный Telnet (Telnet для COM) в Mac OS X 10.9.5 (Mavericks). Mac подключен к последовательному устройству. У меня нет проблем с доступом к последовательному устройству с Mac с помощью экрана:

screen /dev/cu.USBserial

Тем не менее, я хотел бы получить доступ к устройству удаленно, через Telnet.

Я пытался использовать Netcat ( nc) и имел ограниченный успех. Команда, которую я использовал:

nc -l 9999 > /dev/cu.USBserial < /dev/cu.USBserial

И тогда я могу Telnet к устройству. Однако это не работает по двум причинам:

  1. Для интерактивного пользовательского интерфейса ввод по существу буферизован до тех пор, пока я не нажму return.
  2. Весь мой вклад возвращается ко мне. В реальной жизни устройство должно повторять вводимые мной символы.

Как правильно это сделать?

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

Ответы:

4

Самый простой способ:

  1. telnet(или скорее ssh) на ваш Mac
  2. введите вашу screen /dev/cu.USBserialкоманду

Теперь, если вы не хотите подключаться к своему компьютеру Mac напрямую через com-порт или разрешать другим делать это и ничего больше, вот способ:

  1. Создайте выделенного пользователя на вашем Mac. Давайте назовем это "comport" и войдем как этот пользователь.
  2. Создайте скрипт подключения для этого пользователя. Создайте файл с именем /Users/comport/log2com.shи вставьте в него следующие строки:

    #!/bin/bash
    /usr/bin/screen -R /dev/cu.USBserial
    
  3. Разрешите выполнение сценария, выполнив эту команду в вашем терминале:

    chmod +x /Users/comport/log2com.sh
    
  4. Наконец, установите этот скрипт как оболочку входа вашего пользователя. Для этого в Системных настройках> Пользователи и группы в списке пользователей щелкните правой кнопкой мыши пользователя и выберите «Дополнительные параметры». Затем в поле «shell» введите /Users/comport/log2com.shи нажмите OK.

Вот и все. Теперь вы можете использовать telnet (я бы порекомендовал ssh!) Войти в систему на вашем Mac, чтобы попасть прямо на экран.

Обратите внимание, что для выхода вам нужно сделать это способом экрана (обычно Ctrl+ A, затем :quit Return).

Протестировано это на OSX 10.10.5. Дайте мне знать, если это сработало для вас.

CuriousFab
источник
Очень интересное решение. Тем не менее, решение для меня слишком хакерское. Например, нужен новый пользователь. И мне нужно включить telnet для входа на мой Mac (помните, мне нужен обратный Telnet). Если я не выходил из экрана с помощью: выход, но вместо этого отсоединен от него. Следующий логин не удастся. И наконец, что не менее важно, можно получить доступ к оболочке с экрана, и это становится огромной угрозой безопасности (в дополнение к включению telnet). Я думаю, что решение, которое я ищу, заключается в (правильном) доступе netcat / socat к устройству.
какой-то пользователь
Несколько замечаний: 1) На самом деле нужен новый пользователь: чтобы подключиться через telnet или ssh к вашему ящику, вам необходимо предоставить логин. Если вы хотите войти непосредственно в com-порт, вы должны использовать имя входа, выделенное для этого обратного telnet для com. Я не понимаю, как вы ожидаете сделать это без специального входа в систему. 2) Чтобы снова войти в систему после того, как сеанс экрана был отключен вместо выхода, я добавил -Rопцию в ответ. 3) Я не эксперт по экрану, но я не смог открыть оболочку. <kbd> Ctrl </ kbd> + <kbd> A </ kbd> затем <kbd> c </ kbd> не может открыть новый экран, так как у этого имени входа нет оболочки.
CuriousFab
Обратный Telnet - это только сервер, соединяющий порт Telnet, скажем, 4321, с консолью, например, модемом. Логин необязателен. Учетная запись пользователя не нужна. Вы можете сослаться на мой пример nc.
какой-то пользователь
ХОРОШО. Я понял вашу точку зрения. Для решения проблемы буферизации вашего ncподхода вы можете найти решение в этом посте . Кроме того, вы можете взглянуть на GNU netcat, доступный в Brew , и на использование expect. Удачи и дайте нам знать, если вам удастся заставить его работать, ваш путь. ;)
CuriousFab
Еще один совет, основанный на прочтении этого очередного поста, в котором перечислены многочисленные способы взлома канала, перенаправления файлов и перенаправления сети. Сокат кажется очень многообещающим, но с мощью и универсальностью приходит сложность ...
CuriousFab
1

Я нашел решение. Пакет Python PySerial имеет класс rfc2217. У них есть пример приложения, которое работает как сервер telnet:

https://pyserial.readthedocs.org/en/latest/examples.html

$ python rfc2217_server.py /dev/tty.serial

открывает порт 2217, который позволяет Telnet для подключения. Это именно то, что я хотел.

какой-то пользователь
источник