Equivalente SSH di .profile / .bashrc


14

Sto cercando un modo per definire automaticamente alcuni alias all'interno della mia sessione su qualsiasi server a cui mi trovo. Non riesco a inserirli nei .bashrcfile sul server perché gli account utente con cui accedo sono condivisi da altre persone e inoltre ce ne sono dozzine e mantenere uno script su ogni macchina sarebbe doloroso. So che potrei usare expectper digitare automaticamente gli alias ma mi chiedevo solo se OpenSSH ha qualcosa di incorporato che potrebbe essere plausibilmente utilizzato per raggiungere questo obiettivo?

Risposte:


7

Non c'è niente di sbagliato nel farlo in attesa. L'altro modo in cui l'ho fatto è piuttosto sporco, con uno script, prima scp il profilo che si desidera eseguire, quindi ssh in, eseguirlo e rimanere in contatto.

Quindi, posiziona tutte le impostazioni del profilo in un file locale .<local username>-<hostname>-init.shed esegui lo script seguente per accedere all'host remoto.

#!/bin/sh
[ $# -eq 0 ] && { echo "syntax: $0 <host> [<ssh-option>...]" 1>&2 ; exit 1 ; }
host=$1 ; shift    # use any remaining args as ssh options
initfile=".$USER-`hostname`-init.sh"
scp -q ~/.ssh-init.sh "$host:/var/tmp/$initfile"
ssh -t "$@" $host "bash --rcfile /var/tmp/$initfile"

Mi piace perché non richiede alcuna configurazione speciale sul server, bello!
Ramon,

4

È possibile inserire la configurazione .bashrce lasciarli eseguire solo quando si accede. Per rendere ciò possibile, è possibile passare una variabile di ambiente tramite ssh.

.bashrc modifiche

# common stuff
if [ -n "$IAMTHEGREATEST" ]; then
  # my personal cool stuff
fi;
# other global stuff

sshd_config modifiche:

AcceptEnv ... IAMTHEGREATEST

.ssh/config modifiche (lato client):

Host ...
  SendEnv IAMTHEGREATEST

.bashrc modifiche (lato client):

alias ssh='IAMTHEGREATEST="forsure" ssh'

(non testato, ma dovrebbe fare)


In che modo ciò soddisfa l'obiettivo di impostare automaticamente le cose su qualsiasi server in cui si collega l'OP?
Womble

Non è così. Risolve la parte della domanda "gli account utente con cui
accedo

Questo è quasi esattamente quello che faccio, ma con una differenza: invece di accettare quella variabile di ambiente dall'esterno, l'ho impostata nella chiave SSH stessa. Ciò significa che .ssh / authorized_keys contiene righe che iniziano con environment = "IAMTHEGREATEST = forsure" ssh-dss ...
Bron Gondwana,

3

Dalla pagina man ssh (1) , se si crea un file ~ / .ssh / rc , verrà eseguito PRIMA che venga eseguita la shell di login dell'utente, dando così la possibilità di eseguire attività di "pre-installazione" prima dell'accesso. L'esempio fornito era montare le condivisioni di rete prima di accedere.

Se non vuoi usare singoli file ~ / .ssh / rc , puoi fare lo stesso con / etc / ssh / sshrc . Un rapido test per verificare il tuo nome utente particolare o qualche metodo di identificazione potrebbe impedire ad altri di accorgersene.

/ etc / ssh / sshrc proviene SOLO se ~ / .ssh / rc non esiste, quindi è possibile ottenere effettivamente due livelli di complessità.


ding ding ding - abbiamo un vincitore!
In pausa fino a ulteriore avviso.

Perso quello! Anche se sembra attraente, ciò richiederà comunque la configurazione di ciascun server singolarmente poiché è sul lato server, giusto?
Ramon,

sì, lato server, ma dovresti solo scansionare un file, una volta. Non c'è davvero un modo semplice per inviare un flusso di comandi da elaborare immediatamente al momento dell'accesso. {Grin} Dammi un po 'però, forse scrivi qualcosa ... {non oggi!}
lornix

2

Gli alias sono definiti e interpretati dalla shell.

Sfortunatamente non c'è modo sshdi passarli alla shell remota.

Potresti scrivere un sshwrapper sul lato client che imposta un ambiente piacevole sul lato remoto, ma non sarebbe carino.


0

Se possibile, memorizzerei un piccolo script che inizializza / definisce tutto ciò che si desidera su un server accessibile da qualsiasi luogo ed eseguirlo dopo l'accesso in ciascun server.


0

Una possibile soluzione sarebbe quella di mettere il tuo script che imposta tutto su un server web a cui tutti gli altri server possono accedere.

Quindi ogni server dovrebbe avere solo bisogno di un piccolo script per fare qualcosa del tipo:

wget http://myserver.com/myawesomescript.sh
chmod +x myawesomescript.sh
./myawesomescript.sh

In questo modo devi solo aggiornarlo in un unico posto.


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.