2015-11-02 30 views
9

Sto scrivendo un file di configurazione SSH e voglio eseguire un po 'di logica. Ad esempio:Un file ~/.ssh/config può utilizzare variabili?

Host myhost1 
    ProxyCommand ssh -A {choose randomly between [bastion_host1] and [bastion_host2]} -W %h:%p 

È possibile ottenere quanto sopra utilizzando le variabili (bash?)? Grazie!

risposta

3

In ~/.ssh/config non si può avere molta logica, e non Bash. Il manuale per questo file è in man ssh_config e non fa menzione di tale funzionalità.

Quello che puoi fare è creare uno script che avrà la logica che ti serve, e fare a te la configurazione di ssh che chiama lo script. Qualcosa sulla falsariga di:

ProxyCommand sudo /root/bin/ssh-randomly.sh [bastion_host1] [bastion_host2] 

e scrivere uno script Bash /root/bin/ssh-randomly.sh di prendere due parametri hostname, selezionare uno di loro in modo casuale, ed eseguire il comando vero e proprio ssh con i parametri appropriati.

4

No; .ssh/config non viene elaborato da alcun programma esterno. Avrai bisogno di una funzione shell sulla falsariga di

ssh() { 
    (($RANDOM % 2)) && bastion=bastion_host1 || bastion=bastion_host2 

    command ssh -A "$bastion" "[email protected]" 
} 
7

Il tuo proxy può essere uno script di shell.

host myhost1 
    ProxyCommand $HOME/bin/selecthost %h %p 

E poi nel ~/bin/selecthost:

#!/usr/bin/env bash 

hosts=(bastion1 bastion2) 

onehost=${hosts[$RANDOM % ${#hosts[@]}]} 

ssh -x -a -q ${2:+-W $1:$2} $onehost 

testato. La tua milizia può variare. Può contenere noci


Aggiornamento:

Per commenti, ho verificato le seguenti, e funziona anche bene:

host myhost1 myhost2 
    ProxyCommand bash -c 'hosts=(bastion1 bastion2); ssh -xaqW%h:22 ${hosts[$RANDOM % ${#hosts[@]}]}' 

Naturalmente, questo metodo non consente di specificare una porta personalizzata per host, che è possibile aggiungere alla logica di uno script di shell separato se necessario per più host nella stessa voce host nella configurazione ssh.

+0

Cool, grazie! C'è qualche ragione per cui non farei semplicemente 'ssh -A $ onehost $ {2: + - W $ 1: $ 2}' come copia più diretta del Proxycommand esistente? –

+1

In questo script, la variabile '$ onehost' viene impostata selezionando un elemento di matrice casuale da un array bash. Il tuo ProxyCommand è eseguito dalla tua shell, quindi finchè la tua shell è bash, non vedo perché non potresti includere l'intera funzionalità di questo script su una singola riga, anche se non l'ho ancora provato. Ho risposto in questo modo perché non so che stai usando bash come shell predefinita. (Sul mio sistema, utilizzo bash per la programmazione, ma tcsh è la mia shell predefinita.) – ghoti

+0

@BobRisky: aggiunta un'opzione che incorpora lo script su una singola riga ProxyCommand. :) – ghoti

Problemi correlati