Сокат и богатые терминалы (с распространением Ctrl + C / Ctrl + Z / Ctrl + D)

3386
Vi.

socat - exec:'bash -li',pty,stderr,ctty -> bash: no job control in this shell

Какие варианты я должен использовать, чтобы получить полноценную оболочку, как я получаю с ssh / sshd?

Я хочу иметь возможность подключить оболочку ко всему, что может обработать socat ( SOCKS 5, UDP, OpenSSL), а также иметь красивую оболочку, которая правильно интерпретирует все клавиши, различные Ctrl+ C/ Ctrl+ Z, завершение табуляции, клавиши вверх / вниз (с удаленная история).

  • Обновление 1: найдена опция "setsid" socat. Это исправляет "нет контроля работы". Сейчас пытаюсь исправить Ctrl+ D.

  • Обновление 2:

    файл socat: `tty`, raw, echo = 0 exec: 'bash -li', pty, stderr, setsid, sigint, sane
    , Не обрабатывает Ctrl+ D/ Ctrl+ Z/ Ctrl+ Cхорошо, я могу запустить Vim внутри него, удаленная история в порядке.

6
Похоже, все требования выполнены. Теперь отметить вопрос как закрытый? Vi. 14 лет назад 0

1 ответ на вопрос

4
Vi.

Проблемы были:

  1. Отсутствует опция «сетсид» в правой части соцата. Это приведет к тому, что bash не будет контролером сессии.
  2. Используя «-» в левой части соката. Правильно, `tty`, raw, echo = 0.

Теперь у меня есть оболочка для всех вещей, которые может поддерживать socat, и я могу запустить vim / screen / ssh, прервать pingс помощью ^ C, завершить catс помощью ^ D и сделать все остальное в этой оболочке.

Если bash неправильно разбивает строки и / или vimслишком мал или слишком велик, вы можете легко использовать термины размера .

Использование `STDIN: raw, echo = 0` вместо` file: \ `tty \`, raw, echo = 0` работает лучше для меня. Я смог использовать это (используя два соката с сокетом домена unix в середине), чтобы получить доступ оболочки к контейнеру в другом сетевом пространстве имен. Seth Robertson 9 лет назад 0
@SethRobertson Для игры с пространствами имен Linux, также посмотрите мой другой проект: https://github.com/vi/dive Vi. 9 лет назад 0
@SethRobertson, я использую этот способ запуска чего-либо в другом существующем сетевом пространстве имен: `dived -J -S -T --setns / proc / 12345 / ns / net - / bin / bash`. Таким образом, устанавливается только сетевое пространство имен, все остальное (другие пространства имен, управляющий терминал, родительский процесс) сохраняется. Vi. 9 лет назад 0

Похожие вопросы