Risposte:
Inserisci i comandi ~/.bashrc. Tutto ciò che viene eseguito viene eseguito ogni volta che accedi.
Se è necessario eseguire comandi solo quando si accede tramite ssh (ma non quando si accede fisicamente), è possibile verificare la presenza della SSH_CONNECTIONvariabile di ambiente ed eseguire i comandi solo se si trova che esiste.
Basta inserirlo in ~ / .bashrc o /etc/bash.bashrc se lo si desidera per tutti gli utenti:
if [[ -n $SSH_CONNECTION ]] ; then
echo "I'm logged in remotely"
fi
screen, potrei usare la tua risposta e inserirla al screenposto dell'eco. Il problema è che terminando la sessione dello schermo tornerà al prompt SSH invece di disconnettersi. Basta scrivere questo commento mi ha dato la risposta, però: aggiungere il logoutcomando dopo il screencomando.
exec commandsostituirà la shell corrente con qualunque cosa tu esegua.
In alternativa, è possibile specificare un comando da eseguire durante l'invocazione di ssh:
$ ssh -t server 'cmd; exec bash -l'
L'ultimo comando nell'elenco dovrebbe iniziare una sessione interattiva nella shell preferita. Se hai molti comandi da eseguire, considera la possibilità di creare un file di script sul tuo server SSH.
In realtà ~/.ssh/rcè il posto giusto per aggiungere un comando
~/.ssh/rc
Commands in this file are executed by ssh when the user logs in,
just before the user’s shell (or command) is started. See the
sshd(8) manual page for more information.
Per prima cosa eseguire .bashrc sull'host remoto, quindi eseguire i comandi passati sulla riga di comando (che sarà in grado di utilizzare gli alias e le funzioni definite in .bashrc sull'host remoto), quindi lasciarti su un prompt di bash (supponendo che i comandi che esegui tornano al prompt):
$ ssh user@host "bash -lc cmd; cmd; ..."
-l opzione lo rende una shell di login (es. esegui .bashrc)
-c opzione fornisce l'esecuzione del comando esplicito bash
man bash).