Socat- und Rich-Terminals (mit Strg + C / Strg + Z / Strg + D Ausbreitung)

3463
Vi.

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

Welche Optionen sollte ich verwenden, um eine vollwertige Shell zu erhalten, wie ich sie mit ssh / sshd bekomme?

Ich möchte in der Lage sein, die Shell mit allem zu verbinden, was socat verarbeiten kann ( SOCKS 5, UDP, OpenSSL), aber auch eine schöne Shell zu haben, die alle Tasten richtig interpretiert, verschiedene Ctrl+ C/ Ctrl+ Z, Tab-Vervollständigung, Auf / Ab-Tasten (mit entfernte Geschichte).

  • Update 1: Option "Setsid" gefunden. Es fixiert "keine Jobkontrolle". Jetzt versuchen, Ctrl+ zu korrigieren D.

  • Update 2:

    socat-Datei: `tty`, roh, echo = 0 exec: 'bash -li', pty, stderr, setsid, sigint, sane
    . Nicht, dass Ctrl+ D/ Ctrl+ Z/ Ctrl+ Cgut gehandhabt werden kann, ich kann Vim darin starten, der Remote-Verlauf ist in Ordnung.

6
Sieht aus, als wären jetzt alle Anforderungen erfüllt. Jetzt die Frage als geschlossen markieren? Vi. vor 14 Jahren 0

1 Antwort auf die Frage

4
Vi.

Die Probleme waren:

  1. Fehlende Option "setsid" auf der rechten Seite von socat. Es wird dazu führen, dass bash kein Controller der Sitzung ist.
  2. Verwenden Sie "-" auf der linken Seite von socat. Die richtige Sache ist "tty", roh, Echo = 0.

Nun kann ich eine Shell über alles, was socat unterstützen kann, starten und vim / screen / ssh starten, pingmit ^ C unterbrechen, catmit ^ D enden und alles andere in dieser Shell tun.

Wenn die Bash-Zeilen fehlerhaft sind und / oder vimzu klein oder zu groß sind, können Sie sie mit Termsize leicht korrigieren .

Die Verwendung von `STDIN: raw, echo = 0` anstelle von` file: \ `tty \`, raw, echo = 0` hat für mich besser funktioniert. Ich konnte dies verwenden (mithilfe von zwei Socats mit einem Unix-Domänensocket in der Mitte), um Shell-Zugriff auf einen Container in einem anderen Netzwerk-Namespace zu erhalten. Seth Robertson vor 9 Jahren 0
@SethRobertson Informationen zum Spielen mit Linux-Namespaces finden Sie auch in meinem anderen Projekt: https://github.com/vi/dive Vi. vor 9 Jahren 0
@SethRobertson, ich benutze diesen Weg, um etwas in einem anderen existierenden Netzwerk-Namensraum zu starten: `dived -J -S -T --setns / proc / 12345 / ns / net - / bin / bash`. Auf diese Weise wird nur der Netzwerk-Namensraum festgelegt, alles andere (andere Namensräume, steuerndes Terminal, übergeordneter Prozess) bleibt erhalten. Vi. vor 9 Jahren 0