Как настроить обратный 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. Дайте мне знать, если это сработало для вас.


Очень интересное решение. Тем не менее, решение для меня слишком хакерское. Например, нужен новый пользователь. И мне нужно включить 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 для подключения. Это именно то, что я хотел.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.