Come utilizzare un file .bashrc personalizzato sull'accesso SSH


21

Ho scoperto che con la nuova società con cui lavoro spesso devo accedere ai server Linux con una durata relativamente breve. Su ciascuno di questi server ho un account, ma ogni volta che ne viene creato uno nuovo, devo passare attraverso la seccatura di trasferire sul mio .bashrc. È possibile tuttavia che tra circa un mese quel server non sarà più in circolazione. Devo anche accedere a molti altri server per brevi periodi di tempo (minuti) in cui non vale la pena trasferirli sul mio .bashrc ma dato che sto lavorando su molti server, ciò comporta un notevole dispendio di tempo.

Non voglio cambiare nulla sui server, ma mi chiedevo se ci fosse un modo per avere un .bashrc "per connessione", quindi ogni volta che avrei SSH su un server le mie impostazioni sarebbero state usate per quella sessione.

Se questo è possibile, sarebbe bello se potessi fare la stessa cosa con altri file di configurazione, come i file gitconfig.


Questa non è una soluzione per connessione ma potresti comunque trovarla preziosa. Scopri la base su GitHub. Maggiori dettagli in questa risposta sulla community di Super User.
codeforester

Risposte:


6

Penso che ciò che vuoi sia (nel tuo .ssh / config sulla macchina da cui ti colleghi):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

allora puoi uscire con:

source .bashrc

ed essere sulla buona strada. LocalCommand esegue il comando sul server a cui ci si sta connettendo quando arriva lì, proprio prima della sessione effettiva.

Vorrei anche assicurarmi che gli sshds sui server siano configurati con PermitLocalCommand yes

Esistono molti modi in cui è possibile modificare LocalCommand per farlo funzionare nel proprio ambiente specifico: ad esempio, è possibile arricciarsi da un server Web interno o estrarre da un mount nfs.


Un paio di note. Prima di tutto, penso che tu abbia cambiato l'ordine dei file nel comando scp, dal momento che voglio trasferire il mio bash al server e penso che tu l'abbia invertito. In secondo luogo, puoi semplicemente aggiungere ; source /path/to/.bashrcdopo il comando scp per averlo automaticamente. Infine, un aspetto negativo non molto importante di questo metodo è che devo digitare la mia password due volte. Ma alla fine ha funzionato, quindi grazie.
gsingh2011,

scusa per quello! Stavo lavorando fuori di testa, quindi mi dispiace per il disordine. Sei in grado di configurare impostazioni chiave senza password nel tuo ambiente? Lo abbiamo nel nostro ambiente ed è una cosa bellissima. Sono contento che abbia funzionato!
Quinn Murphy,

@ gsingh2011: source /path/to/.bashrcverrà eseguito sul computer da cui ci si sta connettendo. I comandi in LocalCommandnon hanno accesso alla sessione ssh.
Oliver,

@Oliver Hai ragione. Ho deciso di automatizzare il sourcing di .bashrc dal computer remoto. Devo cambiare alcune cose sul lato server al primo accesso, ma è molto più conveniente di quello che dovevo fare prima.
gsingh2011,

16

Penso che sshrc sia quello che stai cercando: https://github.com/Russell91/sshrc

sshrc funziona proprio come ssh, ma genera anche ~ / .sshrc dopo aver effettuato l'accesso in remoto.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

Puoi usarlo per impostare variabili d'ambiente, definire funzioni ed eseguire comandi post-login. È così semplice e non avrà alcun impatto sugli altri utenti sul server, anche se usano anche sshrc. Per una configurazione più avanzata, continua a leggere.


Si prega di interrompere lo spamming con post solo link. Sei perfettamente in grado di aggiungere commenti (quali sono i tuoi post relativi a sshrc, comunque).
Deer Hunter,

3
Sto lavorando per sistemarli tutti!
RussellStewart,

Fatto. La prima volta ero stato tentato di fare un breve post solo link. Adesso lo so meglio.
RussellStewart,

1
Ho scritto molto tempo fa (prima di sshrc) un simil sshrc: github.com/fsquillace/pearl-ssh È solo più efficiente, piccolo e senza dipendenze xxd.
user967489

1

Se non hai mai colpito il server prima, non ci sarà alcuna voce in ~ / .ssh / known_hosts per questo.

Puoi cercare un determinato host noto con "ssh-keygen -F", ma dovrai testare quell'output (grep) poiché ssh-keygen non restituisce false per mancare. Notare che se si fa riferimento a un host con identificatori diversi (indirizzo IP, nome host, FQDN), questi vengono trattati come istanze separate.

È possibile scrivere un wrapper per ssh che trasferisce il proprio ambiente utente a quell'host al primo accesso:

ssh-newenv () {if! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 trovato:"; quindi rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:.; fi; ssh $ 1; }

Se si desidera renderlo più robusto, è possibile verificare l'esistenza di un file di ambiente noto, hash o altro marcatore sull'host remoto.


0

Non so se esiste un .bashrc per sessione.

Un'altra soluzione sarebbe quella di scrivere un piccolo script che trasferisca tutte le tue configurazioni preferite nella tua nuova cartella home.

Forse fai semplicemente una cartella con tutte le tue configurazioni con i percorsi e trasferiscili con scp

piace

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

e poi a

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

Ciò consente di risparmiare tempo.


0

Non penso sia possibile, dato che ssh non ha nulla a che fare con il tuo .bashrc. È la shell che carica quel file, non ssh.

Qualche idea:

  1. Configura la tua home directory remota al primo accesso.
  2. Usa NFS per montare la tua home directory contenente il tuo .bashrc su ogni server. In questo modo, hai le stesse impostazioni ovunque.
  3. Se stai bene con solo alcune variabili d'ambiente trasmesse ai server remoti, dovresti controllare l' SendEnvopzione (vedi la ssh_configpagina man per maggiori informazioni). Se il server è impostato correttamente (ovvero ha il valore adeguato AcceptEnvin sshd_config), è possibile utilizzare SendEnvper copiare le variabili di ambiente sull'host remoto.
  4. Non so se funziona, ma forse puoi usare male l' ProxyCommandimpostazione (vedi la ssh_configpagina man) per inviare il tuo .bashrco altri file prima di connetterti all'host remoto. Ciò richiederebbe alcuni test, tuttavia. Inoltre, tieni presente che ciò potrebbe interferire con scp.

0

Penso che https://github.com/fsquillace/pearl-ssh faccia quello che ti serve.

L'ho scritto molto tempo fa prima che sshrc nascesse e ha più vantaggi rispetto a sshrc:

  • Non richiede dipendenze da xxd per entrambi gli host (che può non essere disponibile sull'host remoto)
  • Pearl-ssh utilizza un algoritmo di codifica più efficiente
  • Sono solo ~ 20 righe di codice (davvero facili da capire!)

Per esempio:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
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.