Come posso gestire un elenco di hosts frequentemente accessibili?

Come posso select rapidamente e accedere agli host multipli che devo accedere tramite ssh? Sto costruendo uno script di shell come quello sottostante che utilizza la dialog di dialog per mostrare un menu di host dalla row di command, ma sono curioso se c'è un modo migliore.

 #!/bin/dash tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$ trap "rm -f $tempfile" 0 1 2 5 15 while [ 1 ] do dialog --menu "Select Host" 0 0 0 \ "hostname1" "Host description 1" \ "hostname2" "Host description 2" \ "hostname3" "Host description 3" 2> $tempfile HOSTNAME=`cat $tempfile` if [ "x" = "x$HOSTNAME" ]; then break fi ssh $HOSTNAME done 

  • Inserimento di chiavi RSA in chiave azzurra
  • Le connessioni sconosciute ssh trovate in lsof -i sono state compromesse il mio server?
  • SSH non è in grado di autenticarsi dopo la modifica manuale di / etc / passwd e / etc / shadow
  • Stessa chiave RSA su più PC
  • È ansible accedere a un server SSH con una substring configurata male?
  • La mastice si blocca per un po '
  • è fail2ban sicuro? Meglio usare i tasti ssh?
  • Aggiunta di inoltro port in modo programmato in una session SSH di ControlMaster
  • 13 Solutions collect form web for “Come posso gestire un elenco di hosts frequentemente accessibili?”

    Mi piace avere each host impostato con un breve nome nel file ~ / .ssh / config sulla mia macchina client. Ecco un esempio:

     Host host1 HostName longhostname.mydomain.com User remoteuser IdentityFile ~/ssh-keys/id_rsa-my-keypair 

    In questo modo posso solo digitare "ssh host1" e accedere immediatamente.

    Per una soluzione basata su GUI, esaminare in SSHmenu .

    Per i frequenti login di solito dipendo da nomi di host brevi. La nostra società DNS contiene la maggior parte di essi, il resto è in / etc / hosts. Combinato con un agente ssh questo è abbastanza conveniente per me. Oh sì, e: memory muscolare. Quando penso a un hostname compare magicamente sullo schermo se le mie dita sono abbastanza vicine alla tastiera.

    Per i comandi less frequenti dipendo di solito la cronologia dei comandi (se non sono così rari) o il Wiki where sono documentati (copia / incolla). Questo approccio ha il vantaggio che i compiti less frequenti sono più o less garantiti per essere documentati completamente.

    Ho pensato a giocare con l'automatizzazione del completamento del command, in modo che ssh espanderà automaticamente i nomi di host frequenti su "scheda", ma fino ad oggi non ho perso troppo questo … Un giorno mi …

    Onestamente posso digitare l' ssh user@host o quando sto su windows winkey+r then putty <server> più veloce di qualsiasi sistema di menuing. Questo e io eviterò di usare il mouse per quanto ansible, perché quegli zecche dell'orologio si addicono alla fine della giornata.

    Ho una memory fotografica, basta ricordare i loro indirizzi IP, sono triste, ma ho qualche beneficio che devo dire 🙂

    Preferisco piccoli script di shell o alias shell. Nella migliore tradizione UNIX, li denomino il più corto ansible per ridurre al minimo la digitazione.

    Ad esempio, ho un alias "ns1" che è il command SSH da 1 linea necessaria per accedere al server di dominio (ovviamente) che ho mantenuto.

    Di solito il nome del command è un breve mnemonico per il nome della macchina e la versione non prefissata di tale nome è impostata su ssh. Così "ns1" mi ssh in, e (se fosse una scatola di Windows) l'alias "rns1" potrebbe sparare un command client desktop remoto a quella macchina.

    Se avessi tanti che non potessi tenere traccia di tutti, avrei usato il metodo di script shell e tenevo una row di descrizione su ciascuno di essi con un tag comune per tutti gli script. Poi scrivevo un piccolo script che printingsse il nome di ciascun file nella mia directory di script personalizzato seguita da quello che ho preso da quella linea di commenti. L'esecuzione di uno script quindi documenterebbe sullo schermo each command e ciò che ha fatto.

    Ho appena imparato alcuni giorni fa che è ansible utilizzare ~/.ssh/config per rendere questo abbastanza indolore.

    Le voci in quel file sembrano così:

     Host short User joni HostName short.foo.bar.domain.fi 

    (L' User può omesso, nel qual caso si usa il nome utente corrente.)

    Quindi è ansible utilizzare il nome host corto: ssh short . Oppure con il completamento di bash completato, digiterebbe qualcosa come ssh sh , hit tab e questo è.

    Questa e la cronologia dei comandi Ctrl-R fanno SSH'ing ai miei host preferiti abbastanza facile.

    Se si desidera accelerare la connessione, quindi utilizzando la funzionalità ControlPath / ControlMaster del client OpenSSH aiuta e sfrutta la maggior parte delle connessioni che vengono utilizzate leggermente, in modo che è opportuno multiplezare più login per una connessione TCP. ~/.ssh/config viene analizzato in modo che per qualsiasi opzione di configuration si utilizzi la prima corrispondenza trovata, in modo da poter fare qualcosa di simile:

     Host *-nomaster ControlMaster no ControlPath none Host * ControlPath ~/.ssh/cp/%h-%p-%r Host *-master ControlMaster yes Host foobar foobar-master foobar-nomaster Hostname foobar.example.org 

    e dovrai anche mkdir ~/.ssh/cp , naturalmente.

    Quindi utilizzare il tab-completamento di zsh che viene fornito con tab-completamento per molti comandi, tra cui ssh. Per ssh, preferirà gli host dai file known_hosts (sia utente che sistema), ma se il prefisso host non corrisponde a quelli utilizzati, le regole host ~ / .ssh / config.

      schermo 

    Poi li lascio solo aprire.

    Qual è il tuo strumento o metodo preferito per accedere rapidamente agli host che devi accedere tramite ssh?

    Ho usato script, ma mi piace molto usando iterm ed è la funzionalità dei segnalibri.

    Certo, facendo la cosa clicca con il mouse e trovare un server "tra" tra un elenco richiede più tempo che la rovescia nella row di command. Ma iTerm ha scorciatoie da tastiera.

    E con i segnalibri posso raggruppare gruppi di server in cartelle logiche (produzione / web o produzione / zone / web). Ho più di un centinaio di server da curare: ricordare che tutti i loro nomi non succedono, per non parlare di ricordare quali server appartengono nella fattoria JDE e quali sono il mio cluster di applicazioni BOM.

    Soprattutto alle 03:00 quando la roba è rotta.

    Se hai bash come shell puoi utilizzare il seguente snippet per utilizzare il file known_hosts per bash_completion:

     complete -W “$(echo `cat ~/.ssh/known_hosts | cut -f 1 -d ' ' | sed -es/,.*//g | uniq | grep -v “\[“`;)” ssh 

    questo non funziona se hai hash i tuoi host noti, quindi dovresti analizzare qualcos'altro come il tuo file / etc / hosts.

    osx per bash_completion include già il supporto per il completamento della scheda ssh

    Il completamento della scp tab è anche molto dolce, ma richiede l'utilizzo di ssh-agent o di ssh_config per fare riferimento a un file di identity framework; senza password con una corrispondente chiave pubblica sull'host remoto.

    Il pacchetto di completamento bash per linux e OS X utilizza gli ssh known_hosts per la compilazione di tabs di voci host. Quello, oltre a un file host completo, è il mio metodo.

    Uso una combinazione di .ssh / config e schermo:

    In primo luogo (come accennato in alcune risposte precedenti) ho configurato il mio file .ssh / config in modo da poter usare i nomi brevi e ignorarmi digitando il mio nome utente (che non è lo stesso del nome utente della mia macchina locale, quindi è bene averlo esplicitamente inserito. ssh / config) e, preferibilmente, utilizza chiavi pubbliche per gli accessi senza password.

    Ho un alias (o function) che elenca tutti gli host nel mio file .ssh / config, quindi se dimentico i nomi di essi (ho accesso a diverse dozzine e gli schemi di denominazione sono inconsistenti e non uso tutti come spesso come altri) posso solo digitare 'host' per vedere tutti i loro nomi elencati.

    Adesso, per lo schermo. Dal momento che la visualizzazione dello schermo sulla mia macchina locale significa che perdo tutte le mie sessioni quando prendo la mia casa per la notte per la camera porttile e uno dei grandi vantaggi dello schermo sta avendo sessioni persistenti, non esegue lo schermo a livello locale. Invece mi entra in un server remoto e esegui lo schermo su quel server (chiamiamolo "jumper" in quanto serve come "punto di salto") e da lì entra nelle altre macchine con cui sto lavorando.

    Non li metto tutti nel mio file .screenrc per il login automatico, perché non voglio OGNI server each volta. Di solito desidero un sottoinsieme, quindi ho una session di schermata con un sottoinsieme e un'altra session di schermata con un altro sottoinsieme dello schermo.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.