ssh + sudo + su en el shell de inicio de sesión

11

Tengo varias máquinas en las que utilizo regularmente solo con el propósito de usar sudo supara pasar el resto de mi sesión conectado como un usuario especial. El flujo de trabajo general es:

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

Me gustaría resumir esto en una sola línea que pueda alias, para que pueda configurar un alias para cada máquina y llegar a donde necesito estar en un solo comando, sin tener que escribir el sudo su - specialuserrepetitivo. Yo tal vez podría configurar me@othermachinepara sudo suel inicio de sesión, pero me gustaría mantener la flexibilidad necesaria para operar como mesi necesito.

( Nota: no tengo ningún control othermachineni la forma en que está configurado; este es un flujo de trabajo establecido en el que entré cuando fui contratado).

Mi primer pensamiento fue solo

ssh me@othermachine "sudo su - specialuser"

y este tipo de trabajo funciona, pero no me da aviso, lo ^Cmata y me desconecta, y supongo que probablemente otras cosas también estén mal.

Después de leer el comando Run Remote ssh con Full Login Shell , probé un par de cosas más exóticas como

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

y

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

- ninguno de los cuales esperaba trabajar, y no lo hicieron, pero pensé que debería probarlos para completarlos (y evitar el cierre como duplicado); produjeron el mismo shell sin prompt (el segundo con un shell adicional sin prompt adicional para medespués exitdel anterior specialuser). Y lo intenté

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

pero solo me atrapó

sudo: no tty present and no askpass program specified

Mejores ideas?

David Moles
fuente
¿Qué hay de agregar el comando sudo ~/.profiledespués de un breve retraso?
Alex
¿La idea es que, en el extraño caso, no quiero sudoque golpee ^C? Si no puedo encontrar algo mejor, podría intentarlo.
David Moles
1
Podrías su mede specialuser. O en .profileo .bashrc, si no sigue el sudocon exit, el primero exitlo llevará de regreso a me, con un segundo para finalizar la sesión. O incluso use un archivo de marca, sudoprecedido [ -f ~/.keep.me ] && del ~/.keep.mey seguido por [ \! -f ~/.keep.me ] && exit: entonces solo necesita un script o un alias para un comando mecomo :>~/.keep.me; exit. Ahora exitfinalizará su sesión y mevolverá a su sesión de inicio de sesión.
AFH
1
Considere escribir su versión final /bin/bashy no una simple bashpor razones de seguridad (para evitar el troyano ). Especialmente si hay un sudoantes ...
Hastur

Respuestas:

11

Esta línea debería funcionar para ti

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

Esta solución me da un aviso o no dependiendo del -tinterruptor

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

Notas de man ssh

-t
Fuerza la asignación de pseudo-tty. Esto se puede usar para ejecutar programas arbitrarios basados ​​en pantalla en una máquina remota, lo que puede ser muy útil, por ejemplo, al implementar servicios de menú. Varias opciones -t fuerzan la asignación de tty, incluso si ssh no tiene tty local .

Hastur
fuente
Esto funciona para mí ... ¿se puede hacer también a través de la configuración ~ / .ssh / config específica del host?
Hola
1
@where, sí, puedes hacerlo con RequestTTY force(que es igual a -t) y RemoteCommand sudo su - specialuser! Sin embargo, tenga en cuenta que otros programas que usan SSH (como scp, rsync, etc.) ya no funcionarán correctamente para este host.
Robert Riedl