Imposta ssh nelle finestre di sfondo


2

Attualmente ho cygwin installato e ssh in una macchina ed eseguo comandi come questo.

ssh user@ip "command"

L'unico problema è che richiede molto tempo per aprire una nuova sessione ssh ed eseguire ogni comando.

Quindi la mia domanda: è possibile mantenere una sessione ssh in esecuzione in background in modo da poter eseguire i comandi a un ritmo molto più veloce (e non è necessario aprire una nuova sessione ssh per ogni comando)?


1
Non ho abbastanza tempo per scrivere una risposta completa, ma come idea. Usa 'schermo'. Qualcosa di simile a ssh user@ip "screen -command 'command1'; screen -command 'command2'; screen -command 'command3' In questo modo, puoi controllarlo più tardi nelle schermate. In alternativa ssh user@ip "command$;command$;command$" In questo modo, si ridurrebbe la quantità di connessione ssh a uno e quei comandi sarebbero anche quasi perfettamente paralleli.
TheCommoner282


@ TheCommoner282 Aggiungerò una taglia in due giorni se non invii una risposta entro tale data.
William


@ TheCommoner282 Mi piacerebbe un screen / tmux rispondi se lo vuoi ancora pubblicare. La risposta attuale è terminata.
William

Risposte:


2

Stavo lavorando a una soluzione per questo problema pochi mesi fa, perché era necessario per uno progetto nel mio attuale lavoro. Il problema è descritto in openssh bugzilla , con allegato toppa che funziona intorno ai dispersi cygwin caratteristica. Stavo anche discutendo di questo con gli sviluppatori a monte e cygwin manutentori, ma sembra che non sia ancora stato applicato in nessuna di queste versioni.

Breve storia lunga

Cygwin non ha implementato uno speciale protocollo di messaggistica che consente di passare i descrittori di file tra processi completamente indipendenti su Unix. Dalle parole di manutentore di cygwin, sembra impossibile implementare questa funzionalità nell'API di Windows, dal momento che i descrittori di file sono compresi in modo totalmente diverso.

Ho avuto questo però dal mio amico che ha sottolineato che questo è un problema abbastanza comune e renderebbe molte persone felici se questo avrebbe funzionato. Così ho iniziato a fare hacking e ho trovato questa soluzione con socket, che è stata utilizzata con successo nello strumento di cui sopra - scap-workbench.

Come ottenerlo?

Questa è la domanda. Ho pensato che dovrei scrivere un po ' come costruire il tuo ssh sotto cygwin , quindi questa è una grande opportunità.

Costruisci dalla fonte

  1. Scarica e installa cygwin da cygwin.com
  2. Dall'installazione del repository Cygwin openssh e le sue dipendenze (in pratica questa lista dovrebbe essere sufficiente):

     ./setup-x86_64.exe -nq -P autoconf,automake,binutils,cygport,cygwin-devel,gcc-core,git,libcom_err-devel,libcom_err2,libcrypt-devel,libcrypt0,libedit-devel,libedit0,libgcc1,libgssapi_krb5_2,libiconv-devel,libiconv2,libintl-devel,libintl8,libk5crypto3,libkrb5-devel,libkrb5_3,libkrb5support0,libncurses-devel,libncursesw10,libopenssl100,libssp0-4.9.2-3,make,openssl-devel,w32api-headers,w32api-includes,zlib-devel,zlib0-1.2.8-3,git,wget
    
  3. Riapri il terminale Cygwin

  4. Scarica l'ultimo rilasciato portatile versione (attualmente 7.1p1)

    wget http://mirror.steadynet.cz/pub/OpenBSD/OpenSSH/portable/openssh-7.1p1.tar.gz # or you can choose different mirror
    tar zxvf openssh-7.1p1.tar.gz
    cd openssh-7.1p1
    autoreconf
    
  5. applicare la patch (spero che si applica ancora liscia)

    wget https://raw.githubusercontent.com/Jakuje/stuff/master/openssh_without_fdpass.patch
    cat openssh_without_fdpass.patch | patch
    
  6. configurare

    mkdir build
    cd build
    ../configure --prefix=/usr \
         --sysconfdir=/etc \
         --libexecdir='${sbindir}' \
         --localstatedir=/var \
         --datadir='${prefix}/share' \
         --mandir='${datadir}/man' \
         --infodir='${datadir}/info' \
         --with-kerberos5 \
         --with-libedit \
         --with-xauth=/usr/bin/xauth \
         --enable-etc-default-login
    
  7. costruiscilo!

    make CFLAGS=-g
    

Scarica binario pronto con tutte le dipendenze

Disponibile dal fedorapeople.org

Urge a monte

Un'altra possibilità è di spingere openssh o cygwin ad applicare questa patch. Ciò lo renderebbe utile a più persone. Non ho fatto troppi sforzi in questo poiché ho pubblicato la patch, a causa di altri compiti.

Caso di prova minimo

  # initiate connection
SSH_HOST="user@hostname"
C_PATH="~/.ssh/master_%r@%h:%p.socket"
./ssh -M -f -N -o -p 314 ControlPath="$C_PATH" "$SSH_HOST"
 # do whatever commands you want
./ssh -o ControlPath="$C_PATH" "$SSH_HOST" -p 314 "echo test"
 # terminate connectino
./ssh -o ControlPath="$C_PATH" "$SSH_HOST" -p 314 -O exit

(Nota ./ssh, perché vogliamo invocare il binario che è costruito nella directory corrente e non quello fornito da cygwin, che è nel tuo $PATH )


Ho aggiunto dettagli su come costruire ssh sotto cygwin o dove scaricare binary che ho compilato alcuni mesi fa e anche test case minimali per essere sicuro di ciò che volevamo ottenere. Spero che sarebbe di aiuto.
Jakuje

Oppure puoi ottenere upstrem da tarball, se dovesse funzionare per te. C_PATH è variabile dove verrà memorizzato il tuo socket UNIX_DOMAIN ed è il pezzo che collega le singole connessioni.
Jakuje

@ William è parte di autoconf pacchetto, che è elencato nei pacchetti richiesti. Forse avrai bisogno di riaprire la shell cygwin dopo l'installazione.
Jakuje

non sono sicuro. Stavo installandoli usando la casella di controllo accanto a ciascun pacchetto.
Jakuje

aggiunto bounty qui è l'errore corrente. Quando corro autoreconf ottengo ' is already registered with AC_CONFIG_FILES. /usr/src/ports/autoconf2.5/autoconf2.5-2.69-3.noarch/src/autoconf-2.69/lib/autoconf/status.m4:288: AC_CONFIG_FILES is expanded from... configure.ac:4884: the top level autom4te-2.69: /usr/bin/m4 failed with exit status: 1 autoreconf-2.69: /usr/bin/autoconf-2.69 failed with exit status: 1
William

0

Il problema con la sessione ssh di lunga durata è talvolta dovuto al fatto che il server SSH sta tentando di cercare il nome host del client SSH. Prova a modificare il file di configurazione di sshd daemon in / etc / ssh_config e modifica o aggiungi (se non c'è) questa direttiva:

UseDNS no

Devi prima generare il file di configurazione con il comando:

ssh-host-config

Sei sicuro che funzioni in Cygwin?
William
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.