Tengo varias máquinas en las que utilizo regularmente solo con el propósito de usar sudo su
para 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 - specialuser
repetitivo. Yo tal vez podría configurar me@othermachine
para sudo su
el inicio de sesión, pero me gustaría mantener la flexibilidad necesaria para operar como me
si necesito.
( Nota: no tengo ningún control othermachine
ni 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 ^C
mata 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 me
después exit
del 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?
~/.profile
después de un breve retraso?sudo
que golpee^C
? Si no puedo encontrar algo mejor, podría intentarlo.su me
despecialuser
. O en.profile
o.bashrc
, si no sigue elsudo
conexit
, el primeroexit
lo llevará de regreso ame
, con un segundo para finalizar la sesión. O incluso use un archivo de marca,sudo
precedido[ -f ~/.keep.me ] && del ~/.keep.me
y seguido por[ \! -f ~/.keep.me ] && exit
: entonces solo necesita un script o un alias para un comandome
como:>~/.keep.me; exit
. Ahoraexit
finalizará su sesión yme
volverá a su sesión de inicio de sesión./bin/bash
y no una simplebash
por razones de seguridad (para evitar el troyano ). Especialmente si hay unsudo
antes ...Respuestas:
Esta línea debería funcionar para ti
Esta solución me da un aviso o no dependiendo del
-t
interruptorNotas de
man ssh
fuente
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.