Terminale Socat i rich (z propagacją Ctrl + C / Ctrl + Z / Ctrl + D)

6

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

Jakich opcji należy użyć, aby uzyskać w pełni rozwiniętą powłokę, tak jak w przypadku ssh / sshd?

Chcę mieć możliwość podłączenia powłoki do wszystkiego, co potrafi obsługiwać socat ( SOCKS 5 , UDP, OpenSSL), ale także do posiadania ładnej powłoki, która poprawnie interpretuje wszystkie klucze, różne Ctrl+ C/ Ctrl+ Z, uzupełnianie tabulatorów, klawisze góra / dół (z historia zdalna).

  • Aktualizacja 1: Znaleziono opcję socat „setsid”. Naprawia „brak kontroli zadań”. Teraz próbuję naprawić Ctrl+ D.

  • Aktualizacja 2:

    plik socat: `tty`, raw, echo = 0 exec: 'bash -li', pty, stderr, setsid, sigint, sane
    . Nie obsługuje dobrze Ctrl+ D/ Ctrl+ Z/ Ctrl+ C, mogę uruchomić w nim Vima, zdalna historia jest OK.

Vi.
źródło
Wygląda na to, że wszystkie wymagania są teraz spełnione. Teraz, aby oznaczyć pytanie jako zamknięte?
Vi.

Odpowiedzi:

4

Problemami były:

  1. Brak opcji „setsid” po prawej stronie socat. Spowoduje to, że bash nie będzie kontrolerem sesji.
  2. Używanie „-” po lewej stronie socat. Właściwą rzeczą jest `tty`, raw, echo = 0.

Teraz mogę mieć powłokę nad wszystkimi funkcjami obsługiwanymi przez socat i mogę uruchamiać vim / screen / ssh, przerywać ping^ C, kończyć cat^ D i robić wszystko inne w tej powłoce.

Jeśli bash łamie linie niepoprawnie i / lub vimjest za mały lub za duży, możesz użyć termostatu, aby go łatwo naprawić.

Vi.
źródło
Używanie STDIN:raw,echo=0zamiast file:`tty`,raw,echo=0działało dla mnie lepiej. Byłem w stanie to wykorzystać (używając dwóch socat z gniazdem domeny unix pośrodku), aby uzyskać dostęp powłoki do kontenera w innej sieciowej przestrzeni nazw.
Seth Robertson
@SethRobertson Aby zapoznać się z grą w przestrzeniach nazw Linuksa, zobacz także mój inny projekt: github.com/vi/dive
Vi.
@SethRobertson, używam ten sposób zaczynając coś w innych istniejących nazw sieci: dived -J -S -T --setns /proc/12345/ns/net -- /bin/bash. W ten sposób ustawiana jest tylko przestrzeń nazw sieciowych, wszystko inne (inne przestrzenie nazw, terminal sterujący, proces nadrzędny) zostaje zachowane.
Vi.