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?

~/.profiledespués de un breve retraso?sudoque golpee^C? Si no puedo encontrar algo mejor, podría intentarlo.su medespecialuser. O en.profileo.bashrc, si no sigue elsudoconexit, el primeroexitlo llevará de regreso ame, 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 comandomecomo:>~/.keep.me; exit. Ahoraexitfinalizará su sesión ymevolverá a su sesión de inicio de sesión./bin/bashy no una simplebashpor razones de seguridad (para evitar el troyano ). Especialmente si hay unsudoantes ...Respuestas:
Esta línea debería funcionar para ti
Esta solución me da un aviso o no dependiendo del
-tinterruptorNotas de
man sshfuente
RequestTTY force(que es igual a-t) yRemoteCommand 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.