ssh + screen: wie geht das?

425
Romain Jouin

Ich versuche, eine Software über ssh zu starten:

Ich kann :

ssh -t user@xx.xx.xx.xx  screen -S datanode -d -m ~/hadoop/bin/hdfs datanode 

Aber

ssh -t user@xx.xx.xx.xx screen -S datanode -d -m ~/hadoop/bin/hdfs datanode 

Funktioniert nicht

Ich habe mehrere Optionen mit Anführungszeichen ausprobiert:

ssh -t user@xx.xx.xx.xx screen '-S datanode -d -m ~/hadoop/bin/hdfs datanode' 

oder

ssh -t user@xx.xx.xx.xx screen -S datanode -d -m '~/hadoop/bin/hdfs datanode' 

oder

ssh -t user@xx.xx.xx.xx screen ' -S datanode -d -m ~/hadoop/bin/hdfs datanode' 

aber ich finde nicht das richtige :-(

0
Mögliches Duplikat von [Remote-SSH-Befehl mit Leerzeichen ausführen?] (Https://superuser.com/questions/1142160/running-remote-ssh-command-with-spaces) Melebius vor 6 Jahren 0
I do not believe the spaces have anything to do with it. The primary issue is to tell ssh to go into the background and secondarily, ensure that the `~` is not expanded locally. Related question: https://superuser.com/questions/1171397/ssh-screen-run-command-and-detach-in-one-go/1171507#1171507 eggo vor 6 Jahren 0

2 Antworten auf die Frage

0
Robert Riedl

Es ist besser, die Optionen zusammenzufassen

ssh -t username@host "screen -dmS 'NAMEofSCREEN' command" 

Sie können dann erneut mit verbinden

screen -r NAMEofSCREEN 

Denken Sie jedoch daran, dass es sich bei diesem Vorgang nicht um einen erneut anfügbaren Bildschirm handelt command. Zum Beispiel:

ssh -t username@host "screen -dmS 'NAMEofSCREEN' echo | wall" 

Wird dir die wallNachricht geben ...

Broadcast message from user@host (pts/15) (Tue Jan 16 12:04:07 2018): 

.. aber der Bildschirm wird sofort geschlossen, nachdem der Befehl erfolgreich ausgeführt wurde

"Besser, die Optionen zusammenzufassen"? Ich würde sagen, das ist Ansichtssache und für das OP-Problem völlig irrelevant. eggo vor 6 Jahren 0
Sorry, aber "-dmS" ist eine Art Standardoptionszeichenfolge für den Bildschirm. Es macht es lesbarer, warum den zusätzlichen Platz nutzen? Natürlich ist es nicht nötig. Robert Riedl vor 6 Jahren 0
Sie haben Recht, dass der zusätzliche Speicherplatz nicht erforderlich ist und möglicherweise leichter lesbar ist, wenn Sie es gewohnt sind, `-dmS NAME` zu betrachten, aber er beantwortet das von dem Fragesteller aufgeworfene Problem immer noch nicht. eggo vor 6 Jahren 0
Ich werde die Antwort aktualisieren Robert Riedl vor 6 Jahren 0
0
eggo

Ich sehe zwei (potentielle) Probleme mit Ihrer Beschwörung von

ssh -t remote screen -S datanode -d -m ~/hadoop/bin/hdfs datanode 
  1. Die Client / Local- Shell (die ausführende ssh) ist diejenige, die erweitert ~und durch den Wert von ersetzt wird $HOME, der sich von dem des Remote-Servers unterscheiden kann. Es wird empfohlen, entweder einen relativen Pfad (z. B. ./hadoop/bin/hdfs) oder einen vollständig qualifizierten Pfad zu verwenden oder den Fernbefehl mit einfachen Anführungszeichen (z. B. '~ / hadoop / bin / hdfs datanode') anzugeben, um die Erweiterung des Clients zu verhindern.
  2. Da der screenBefehl eine separate Instanz startet, aber noch ein untergeordneter Prozess der von ssh gestarteten Shell ist, wird er beendet, wenn die Remote-Shell beendet wird.

Darüber hinaus benötigen Sie keine -tOption, da der Bildschirm sein eigenes Format erstellt ssh.

Versuchen Sie stattdessen mit -fsagen, sshin den Hintergrund gehen kurz vor der Befehlsausführung. dh:

ssh -f remote screen -S datanode -d -m ./hadoop/bin/hdfs datanode 

Gleichwertige Alternative mit nohup:

ssh remote nohup screen -S datanode -d -m ./hadoop/bin/hdfs datanode