Bildschirm kann pty nicht freigeben

781
kidmose

Auf meiner Linux-Box kann screenich bei Verwendung ein Pseudo-Terminal mit öffnen, lesen und schreiben screen. Nach dem Schließen (Ca ky) kann ich keine Verbindung mehr herstellen, ohne das System neu zu starten socat, was das Pseudo-Terminal bereitstellt.

Gleich nach dem Start sehen die socatDinge so aus:

 /home/kidmose $ fuser /dev/pts/9 /dev/pts/9: 20960 /home/kidmose $ lsof /dev/pts/9 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME socat 20960 kidmose 5u CHR 136,9 0t0 12 /dev/pts/9 

und ich kann wie erwartet schreiben und lesen:

 /home/kidmose $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9  uname -a Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux 

Das Starten screenfunktioniert auch einmal (ich kann die erwartete Ausgabe schreiben und lesen):

 /home/kidmose $ screen /dev/pts/9 uname -a # My input Linux egki-laptop-linuxmint 3.13.0-24-generic #47-Ubuntu SMP Fri May 2 23:30:00 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux # Response (C-a k y) # I kill the window and screen terminates ([screen is terminating]) 

Jetzt kann ich mich nicht mehr verbinden screenoder einfach schreiben. Der Bildschirm wird sofort beendet [screen is terminating]und beim Versuch, zu schreiben, wird folgende Fehlermeldung angezeigt:

 /home/kidmose $ echo "uname -a" > /dev/pts/9 && cat /dev/pts/9  bash: /dev/pts/9: Device or resource busy 

Einige Infos:

 /home/kidmose $ fuser /dev/pts/9 /dev/pts/9: 20960 /home/kidmose $ lsof /dev/pts/9 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME socat 20960 kidmose 5u CHR 136,9te 0t0 12 /dev/pts/9 /home/kidmose $  

Irgendwelche Ideen, warum es "beschäftigt" / nicht verfügbar ist?

Ich habe bemerkt, dass das ' te' in der lsofAusgabe erscheint. Gibt es eine Erklärung dafür?

Mein Endziel ist es, wie ein virtuelles Terminal auf einem entfernten Gerät zu haben. Aufgrund von NAT usw. muss das entfernte Gerät den Server aufrufen, auf dem sich das virtuelle Terminal befindet.

Edit: Wie Lemonsqueeze es in seinem Kommentar formuliert :

[A: sh -> socat] --> [B: socat -> pty -> screen] Machine A TCP Machine B 
2
Wo genau kommt "socat" ins Bild? lemonsqueeze vor 9 Jahren 0
Ich verwende socat mit einem TCP-Server und dem Pseudo-Terminal (pty), sodass ich eine Shell auf einem anderen Computer ausführen und die E / A von der Shell über TCP an das pty umleiten kann. Mein Ziel ist es, eine Remote-Shell zu erreichen, aber aufgrund von NAT brauche ich den "SSH-Server", um die Verbindung herzustellen. Macht das Sinn? kidmose vor 9 Jahren 0
Fast. Sie haben also zwei Maschinen A und B. Sie wollen eine Remote-Shell auf A von B, aber das ist nicht möglich, weil A NAT ist. Also haben Sie eine Verbindung zu B statt mit socat und führen Sie einige Klempnerarbeiten aus: `[A: sh -> socat] -> [B: socat -> pty -> screen]`. Etwas wie das ? lemonsqueeze vor 9 Jahren 1
Jep. Schöne Art, es zu formatieren :) kidmose vor 9 Jahren 0
Ok, welchen Befehl benutzen Sie für socat on B? lemonsqueeze vor 9 Jahren 0
Überprüfen Sie auch dies http://superuser.com/questions/874133/screen-vs-socat/ 0andriy vor 9 Jahren 0

1 Antwort auf die Frage

2
lemonsqueeze

Vorschlag: In dieser Situation würde ich eine Reverse-SSH- Verbindung wählen :

Anstatt, dass Ihr Computer eine SSH ausführt, führt der Server-Computer eine SSH aus. Durch die Port-Weiterleitung wird sichergestellt, dass Sie SSH wieder auf den Server-Computer zurückgreifen können.

Aber es ist sicherlich nicht so viel Spaß, es mit Socat selbst zu bauen. Ich würde immer noch empfehlen, dieser pty-Ausgabe auf den Grund zu gehen, es ist ein guter Weg, um zu lernen.

Scheint genau das, was ich erreichen wollte. Vielen Dank! kidmose vor 9 Jahren 0