ssh + sudo + su nella shell di login


11

Ho diverse macchine in cui mi collego regolarmente solo allo scopo di utilizzare sudo super passare il resto della mia sessione, come utente speciale. Il flusso di lavoro generale è:

mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff

Vorrei ridurlo in una riga che posso alias, quindi posso semplicemente impostare un alias per ogni macchina e arrivare dove devo essere in un singolo comando, senza dover digitare il sudo su - specialuserboilerplate. Potrei forse impostare su me@othermachineal sudo sulogin, ma mi piacerebbe mantenere la flessibilità di operare come mese fosse necessario.

( Nota: non ho alcun controllo othermachineo il modo in cui è impostato; questo è un flusso di lavoro consolidato su cui sono entrato quando sono stato assunto.)

Il mio primo pensiero fu giusto

ssh me@othermachine "sudo su - specialuser"

e questo tipo di lavoro funziona, ma non mi viene richiesto, lo ^Cuccide e mi disconnette, e presumo che anche molte altre cose siano probabilmente sbagliate.

Dopo aver letto il comando Run Remote ssh con Full Login Shell ho provato un paio di cose più esotiche come

ssh me@othermachine 'bash -l -c "sudo su - specialuser"'

e

ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'

- nessuno dei quali mi aspettavo di lavorare, e non lo fecero, ma pensai che avrei dovuto provarli per completezza (ed evitare il doppio come duplicato); hanno prodotto la stessa shell priva di prompt (la seconda con una shell priva di bonus aggiuntiva per il meafter exit-ing di quella per specialuser). E ci ho provato

ssh me@othermachine "sudo su - specialuser -c bash -l"

ma mi ha appena preso

sudo: no tty present and no askpass program specified

Idee migliori?


Che ne dici di aggiungere il comando sudo ~/.profiledopo un breve ritardo?
Alex

L'idea è che nel caso strano che non voglio sudodovrei colpire ^C? Se non riesco a trovare qualcosa di meglio, potrei provarlo.
David Moles,

1
Puoi su meda specialuser. Oppure in .profileo .bashrc, se non segui il sudocon exit, il tuo primo exitti riporterà indietro me, con un secondo per terminare la sessione. O anche usare un file flag, quindi sudoè preceduto [ -f ~/.keep.me ] && del ~/.keep.mee seguito da [ \! -f ~/.keep.me ] && exit: è quindi necessario solo uno script o un alias per un comando mecome :>~/.keep.me; exit. Ora exitterminerà la sessione e metornerà alla sessione di accesso.
AFH,

1
Si prega di considerare di scrivere nella versione finale /bin/bashe non un semplice bashmotivo di sicurezza (per evitare trojan ). Soprattutto se c'è un sudoprima ...
Hastur

Risposte:


11

Questa linea dovrebbe funzionare per te

ssh -t me@machine "sudo su - specialuser" 

Questa soluzione mi dà un prompt o meno a seconda del -tpassaggio

ssh -t me@machine "/bin/bash -l"   # Give me a prompt

ssh  me@machine "/bin/bash -l"     # Give me NO prompt
ssh  me@machine                    # Give me NO prompt

Note da man ssh

-t
Forza l'allocazione pseudo-tty. Questo può essere usato per eseguire programmi arbitrari basati su schermo su una macchina remota, il che può essere molto utile, ad esempio quando si implementano servizi di menu. Le opzioni multiple -t impongono l'allocazione di tty, anche se ssh non ha tty locale .


Questo funziona per me ... può essere fatto anche tramite l'impostazione ~ / .ssh / config specifica dell'host?
Ehi,

1
@where, sì, puoi farlo con RequestTTY force(che è uguale -t) e RemoteCommand sudo su - specialuser! Tuttavia, tieni presente che altri programmi che utilizzano SSH (come scp, rsync, ecc.) Non funzioneranno più correttamente per questo host.
Robert Riedl,
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.