ssh_config: specifica il comando da eseguire sul computer remoto al momento dell'accesso


16

Questa è un'espansione della mia domanda precedente . Ho bisogno di eseguire un comando memorizzato localmente (cioè mount /home) su una macchina remota al login ssh. Al momento, sto usando:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

che funziona bene, ma mi chiedevo se avrei potuto inserire questo comando nel mio in .ssh/configmodo da non doverlo digitare ogni volta. Ho trovato LocalCommandun'opzione, ma non vedo alcuna RemoteCommandopzione.

È importante che command-to-be-executedsia archiviato sul computer locale, poiché conterrà la password per aprire un disco crittografato. Questo è il motivo per cui non riesco a inserire il comando .profilesul computer remoto.

Risposte:


6

Questa domanda è stata posta in precedenza su SuperUser. La prima risposta utilizza un file remoto che non soddisfa i tuoi requisiti, ma la seconda risposta che suggerisce di utilizzare un alias locale potrebbe essere la soluzione al tuo problema.

È importante che il comando da eseguire sia archiviato sul computer locale, poiché conterrà la password per aprire un disco crittografato. Questo è il motivo per cui non riesco a inserire il comando in .profile sul computer remoto.

Questo probabilmente non è sicuro. Se uso un echocomando come comando ssh, viene visualizzato pssul server remoto:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo

grazie, ma nella soluzione su SuperUser ~/.ssh/rcviene nuovamente memorizzato sul computer remoto. Per quanto riguarda il tuo commento sulla psvisualizzazione dei parametri della mia riga di comando (inclusa la password), ciò non mi disturba. È la macchina remota di cui non mi fido. La mia macchina locale viene utilizzata solo da me, quindi nessun altro ha accesso ps.
Martin Vegter,

6
Che psuscita è dalla macchina remota. Il punto è: tutto ciò che fornisci sshcome comando remoto apparirà sul server remoto in ps.
Martin von Wittich,

1
Si hai ragione. Grazie per averlo segnalato.
Martin Vegter,

1
@MartinvonWittich - Ogni sito SE è indipendente, quindi è completamente accettabile per ogni sito avere Q e A simili purché siano in argomento per quel particolare sito. Si consiglia di copiare il contenuto se compare una Q e la A si trova su un altro sito SE. Personalizzalo come appropriato, quindi è in tema.
slm

7

Questo è stato aggiunto in OpenSSH 7.6:

aggiungere l'opzione RemoteCommand per specificare un comando nel file di configurazione ssh invece di inviarlo sulla riga di comando del client. Ciò consente al file di configurazione di specificare il comando che verrà eseguito sull'host remoto.

rif: https://www.openssh.com/txt/release-7.6



2

È possibile farlo con la collaborazione della macchina remota come segue.

Sul tuo computer locale, inserisci il comando da eseguire nella variabile di ambiente LC_SSH_INITIAL_COMMAND. SSH è in genere configurato per passare tutte le variabili di ambiente del modulo LC_*, in quanto si tratta normalmente di impostazioni internazionali.

Sul computer remoto, esegui eval "$LC_SSH_INITIAL_COMMAND" tramite le impostazioni per chiave in~/.ssh/authorized_keys o da ~/.ssh/rc(attenzione che se hai un ~/.ssh/rcfile, devi occuparti di eseguire xauthmanualmente l'inoltro X11).

Con il authorized_keysmetodo, è possibile eseguire allo stesso modo un comando quando termina la sessione SSH (a meno che il processo di shell non venga interrotto bruscamente; è necessario almeno intercettare il segnale HUP in modo che il comando venga eseguito anche se la connessione si interrompe).

Tuttavia, questo non è un buon accordo per fare qualcosa di globale come montare un filesystem. Dovrai fare attenzione a non montare nuovamente se il filesystem è già montato (ad esempio a causa di un comando SSH in esecuzione simultanea) e non smontare al logout. La mia raccomandazione per questo caso d'uso è ancora quella di fare il montaggio esplicitamente, quindi eseguire i comandi remoti senza fare nulla di speciale e smontare quando non si desidera più accedere a quel file system.


0

Non l'ho provato, ma un approccio potrebbe essere

  • Dichiarare a Subsystemsul telecomando sshd_configche esegue il comando desiderato leggendo alcuni parametri
  • Utilizzare SendEnvsul locale .ssh/configper passare tali chiavi al server remoto
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.