Normalmente, se si passa un comando a ssh in questo modo
ssh me@example.com 'some-command.sh'
Si ottiene una sessione non interattiva e ssh esce non appena viene eseguito il comando (o lo script o qualunque altra cosa). Come posso ottenere una sessione interattiva e tuttavia eseguire un comando che ho specificato dal mio computer locale. Ad esempio, vorrei poter aprire lo schermo e riavviare una sessione dello schermo specifica:
ssh me@example.com 'screen -r 12345'
ma ciò non è consentito, restituendo l'errore "Deve essere collegato a un terminale". che presumo significhi essenzialmente "deve chiamare questo comando da una shell interattiva".
Come altro esempio, uso un sacco di macchine al lavoro che spesso mi richiedono di utilizzare un account condiviso per avere i diritti di fare determinate cose (sì, lo so: cattiva idea ma non incolparmi, non ho impostato le cose che modo), e di solito hanno ksh come shell predefinita. Vorrei accedere, passare a bash (o zsh) e creare il .bash_profile del mio account (o .zshrc). Questo sarebbe facile se potessi stabilire una sessione ssh interattiva e passare un comando al computer remoto per eseguirlo all'accesso.
Ho in mente una soluzione kludgey (e non testata) che pubblicherò, ma spero che qualcuno conosca un modo migliore.
AGGIORNAMENTO: per coloro che non se ne sono resi conto, non ho intenzione di fare tutto questo a mano, quindi dirmi di aprire una sessione interattiva e poi farlo a mano in realtà non risolve nulla.
2 ° AGGIORNAMENTO: Per tentare ancora una volta di chiarire: sto cercando di eseguire comandi (arbitrari) sul server (specificati a livello di codice sul client) ma poi ho una sessione interattiva aperta che è influenzata da tutto ciò che viene fatto da quei comandi programmatici.
echo "command" | ssh user@remote_host