Eu tenho várias máquinas nas quais ssh regularmente apenas com a finalidade de usar sudo su
para passar o restante da minha sessão conectada como um usuário de finalidade especial. O fluxo de trabalho geral é:
mymachine:~ me$ ssh me@othermachine
othermachine:~ me$ sudo su - specialuser # note: no password needed
othermachine:~ specialuser$ # do stuff
Gostaria de resumir isso em uma linha que eu possa usar o pseudônimo, para que eu possa configurar um pseudônimo para cada máquina e chegar onde preciso estar em um único comando, sem precisar digitar o sudo su - specialuser
padrão. Eu poderia talvez criar me@othermachine
a sudo su
no login, mas eu gostaria de manter a flexibilidade para operar como me
se eu precisar.
( Observação: não tenho controle sobre othermachine
a forma como ela é configurada; esse é um fluxo de trabalho estabelecido em que entrei quando fui contratado.)
Meu primeiro pensamento foi apenas
ssh me@othermachine "sudo su - specialuser"
e esse tipo de funciona, mas isso não me deixa alerta, ^C
mata e me desconecta, e presumo que várias outras coisas provavelmente também estejam erradas.
Depois de ler o comando Run Remote ssh com o Shell de login completo, tentei mais algumas coisas exóticas, como
ssh me@othermachine 'bash -l -c "sudo su - specialuser"'
e
ssh me@othermachine 'bash -l -c "sudo su - specialuser"; bash'
- nenhum dos quais esperava trabalhar, e não funcionaram, mas achei que deveria experimentá-los por completo (e para evitar quase como duplicado); eles produziram o mesmo shell sem prompt (o segundo com um shell sem prompt adicional de bônus adicional para me
depois exit
do anterior specialuser
). E eu tentei
ssh me@othermachine "sudo su - specialuser -c bash -l"
mas isso me pegou
sudo: no tty present and no askpass program specified
Idéias melhores?
~/.profile
após um pequeno atraso?sudo
eu deveria acertar^C
? Se eu não conseguir encontrar algo melhor, posso tentar isso.su me
partirspecialuser
. Ou em.profile
ou.bashrc
, se você não seguirsudo
comexit
, o seu primeiroexit
o levará de voltame
, com um segundo para finalizar a sessão. Ou mesmo use um arquivo de sinalizador, portanto,sudo
é precedido[ -f ~/.keep.me ] && del ~/.keep.me
e seguido por[ \! -f ~/.keep.me ] && exit
: você precisa apenas de um script ou alias para um comandome
como:>~/.keep.me; exit
. Agoraexit
encerrará sua sessão eme
retornará à sua sessão de login./bin/bash
e não um simplesbash
por motivos de segurança (para evitar cavalos de Tróia ). Especialmente se há umsudo
antes ...Respostas:
Esta linha deve funcionar para você
Esta solução me fornece um aviso ou não, dependendo da
-t
opçãoNotas de
man ssh
fonte
RequestTTY force
(que é igual a-t
) eRemoteCommand sudo su - specialuser
! No entanto, esteja ciente de que outros programas que usam SSH (como scp, rsync etc.) não funcionarão mais corretamente para esse host.