ssh + sudo + su no shell de login


9

Eu tenho várias máquinas nas quais ssh regularmente apenas com a finalidade de usar sudo supara 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 - specialuserpadrão. Eu poderia talvez criar me@othermachinea sudo suno login, mas eu gostaria de manter a flexibilidade para operar como mese eu precisar.

( Observação: não tenho controle sobre othermachinea 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, ^Cmata 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 medepois exitdo 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?


Que tal adicionar o comando sudo ~/.profileapós um pequeno atraso?
628 Alex

A idéia é que, no caso estranho que eu não queira, sudoeu deveria acertar ^C? Se eu não conseguir encontrar algo melhor, posso tentar isso.
David Moles

1
Você poderia su mepartir specialuser. Ou em .profileou .bashrc, se você não seguir sudocom exit, o seu primeiro exito levará de volta me, com um segundo para finalizar a sessão. Ou mesmo use um arquivo de sinalizador, portanto, sudoé precedido [ -f ~/.keep.me ] && del ~/.keep.mee seguido por [ \! -f ~/.keep.me ] && exit: você precisa apenas de um script ou alias para um comando mecomo :>~/.keep.me; exit. Agora exitencerrará sua sessão e meretornará à sua sessão de login.
AFH

1
Por favor, considere escrever em sua versão final /bin/bashe não um simples bashpor motivos de segurança (para evitar cavalos de Tróia ). Especialmente se há um sudoantes ...
Hastur

Respostas:


8

Esta linha deve funcionar para você

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

Esta solução me fornece um aviso ou não, dependendo da -topção

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
Força a alocação pseudo-tty. Isso pode ser usado para executar programas arbitrários baseados em tela em uma máquina remota, o que pode ser muito útil, por exemplo, ao implementar serviços de menu. Várias opções -t forçam a alocação de tty, mesmo se ssh não tiver tty local .


Isso funciona para mim ... também pode ser feito através da configuração ~ / .ssh / config específica do host?
onde

1
@where, sim, você pode fazer isso com RequestTTY force(que é igual a -t) e RemoteCommand 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.
Robert Riedl
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.