Vraag Hoe kan ik een schermsessie starten met een commando over ssh op een externe server vanaf mijn bureaublad?


Ik wil schermsessies op externe servers kunnen starten vanuit een enkele ssh-opdracht op mijn bureaublad. Het scherm lijkt echter een terminal nodig te hebben, die niet beschikbaar is bij het uitvoeren van een opdracht via ssh.

Dus voor de hand liggend

ssh root@my.machine screen "tail -f /var/log/messages"

(als een voorbeeld) werkt niet en geeft

Must be connected to a terminal.

Ik wil dat SSH de opdracht onder een scherm start, zodat ik me later kan aanmelden en kan koppelen zoals ik zou doen aan een schermsessie die ik handmatig had gestart.


55
2018-06-08 10:57


oorsprong


Terzijde, je kunt deze fout niet raken door slecht gebruik van het scherm. Ik had een shell-functie die exec <foo deed om uit een bestand te lezen. Veel later in een groot script probeerde ik het scherm te starten. Alle onderstaande methoden obv. mislukt omdat de echte boosdoener de exec was. Een om in gedachten te houden. Controleer of je je eigen stdin niet per ongeluk hebt gedood. - Neil McGill


antwoorden:


Probeer de -t optie te gebruiken voor ssh

ssh -t root@my.machine screen "tail -f /var/log/messages"

Van man ssh

-t Pseudo-tty toewijzing forceren. Dit kan worden gebruikt om arbi-
        trary schermgebaseerde programma's op een externe machine, wat kan zijn
        erg handig, bijvoorbeeld bij het implementeren van menuservices. Meerdere -t
        opties dwingen tty toewijzing, zelfs als ssh geen lokale tty heeft.

73
2018-06-08 11:04



Ik probeer hetzelfde met TMux ssh -t user@machine tmux attach en ik kan een remote tmux sessie koppelen, maar het rotzooi met de karaktercodering. Het toont alleen ASCII-tekens. Is hier een oplossing voor? - Macario
@Macario wil je misschien een aparte vraag hiervoor openen, terwijl het tangentieel gerelateerd is terwijl je het met ssh -t uitvoert, het klinkt meer alsof het gerelateerd is aan het instellen van LC_ * anders voor het interactief dan niet-interactief uitvoeren. Wanneer u een opdrachtregel doorgeeft aan ssh om uit te voeren, wordt deze uitgevoerd met de niet-interactieve omgeving. Het is ook mogelijk dat het ontbreken van de TERM-omgevingsvariabele wordt doorgegeven wanneer niet-interactief wordt uitgevoerd, in welk geval tmux geen idee zou hebben van wat voor mogelijkheden uw terminal eigenlijk heeft en terugvalt naar de kleinste gemene deler. - Kjetil Joergensen
Ik gebruik ssh niet maar wordt met hetzelfde probleem geconfronteerd. Help alstublieft. serverfault.com/questions/861632/unable-to-run-code-in-screen - zhangjinzhou


Je kunt gebruiken:

ssh root@host screen -m -d "tail -f /var/log/messages"

Dat start een vrijstaand scherm met een opdracht die erop wordt uitgevoerd.

   -m   causes screen  to  ignore  the  $STY  environment  variable.  With
        "screen  -m"  creation  of  a  new session is enforced, regardless
        whether screen is called from within  another  screen  session  or
        not.  This  flag has a special meaning in connection with the `-d'
        option:

   -d -m   Start screen in "detached" mode. This creates a new session but
           doesn't  attach  to  it.  This  is  useful  for  system startup
           scripts.

32
2018-06-08 14:08



Je antwoord was even goed, jammer dat ik moet kiezen. Misschien moet iemand het eerste antwoord bewerken en uw informatie toevoegen. - Thomas Vander Stichele


Laat antwoord, maar dit is wat ik doe, ik maak een alias (laten we het t noemen) die dit doet:

ssh $MYSERVER -a -x -t screen -xRR -A -e^Zz -U -O

Dit vertelt ssh om agent- en X11-doorsturen uit te schakelen en vertelt screen om aan een lopende sessie te hechten, start een nieuwe indien nodig, gebruik ^Z als de uitbreekopdracht, gebruik UTF-8 en wees slim over de terminal.

Dit alles betekent dat ik een terminal kan openen, typen t en het opent mijn schermsessie op $ MYSERVER. Ik kan dan een andere terminal openen, hetzelfde doen en ik krijg een ander venster voor dezelfde sessie.

Het is heel fijn om meerdere terminalvensters te hebben voor dezelfde schermsessie, zodat je tegelijkertijd op twee schermen kunt kijken.


8
2017-09-12 20:48



Ik heb heel wat pagina's gelezen en niet helemaal beantwoord wat ik zocht, maar je hebt het vastgepakt. Ik neem aan dat een van de schermen of tmux tegenwoordig waarschijnlijk op de meeste servers staat en dat degenen waarmee ik verbinding maak mogelijk kortstondig zijn, dus ik wilde niet knoeien met de bas-hrc zoals de meeste antwoorden suggereren. Je kunt dit ook een functie in je shell maken en argumenten zoals $ host en $ commando accepteren (die je aan het einde zou zetten). En in plaats van je alias te hardcoderen t dat is een enkele host, je zou het kunnen combineren met hostnamen in je ssh_config. - dragon788
@ dragon788 inderdaad, ik heb er nu een functie van gemaakt en heb $ MYSERVER vervangen door "$ @". Ik gebruik deze nog steeds veel. - w00t


Door het volgende in het bestand ~ / .bashrc op mijn server te plaatsen, start het een schermsessie wanneer ik me de eerste keer aanmeld bij de server of, als er al een wordt uitgevoerd, opnieuw verbinding met die sessie tot stand wordt gebracht.

Ik vind dit erg handig:

if [ -n "$SSH_CONNECTION" ] && [ -z "$SCREEN_EXIST" ]; then
    export SCREEN_EXIST=1
    screen -DRi
fi

4
2018-06-08 14:21



Ik heb dit geprobeerd, maar als ik het doe screen -ls dan zie ik geen screen-sessie - Tarun