ssh + sudo + su no shell de login

8

Eu tenho várias máquinas nas quais eu ssh regularmente apenas com o propósito de usar sudo su para passar o resto da minha sessão logado como um usuário de propósito especial. O fluxo de trabalho geral é:

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

Eu gostaria de resumir isso em um verso que eu posso alias, então eu posso apenas configurar um alias para cada máquina e chegar onde eu preciso estar em um único comando, sem precisar digitar o boilerplate sudo su - specialuser . Eu poderia talvez configurar me@othermachine para sudo su no login, mas gostaria de manter a flexibilidade para operar como me se eu precisar.

( Nota: eu não tenho nenhum controle sobre othermachine ou a maneira como ele está configurado; este é um fluxo de trabalho estabelecido que eu vim quando fui contratado.)

Meu primeiro pensamento foi apenas

ssh me@othermachine "sudo su - specialuser"

e esse tipo de trabalho funciona, mas não me faz nenhum aviso, ^C mata e me desconecta, e eu presumo que várias outras coisas provavelmente estão erradas também.

Depois de ler Execute o comando ssh remoto com o shell de login completo Eu tentei algumas coisas mais 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 eu esperava trabalhar, e eles não o fizeram, mas eu pensei que deveria experimentá-los para a perfeição (e evitar perto-como-duplicar); eles produziram o mesmo shell sem prompt (o segundo com um shell de prompt-less de bônus adicional para me após exit de um para specialuser ). E eu tentei

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

mas acabou de me pegar

sudo: no tty present and no askpass program specified

Melhores ideias?

    
por David Moles 06.02.2015 / 22:56

1 resposta

6

Esta linha deve funcionar para você

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

Esta solução fornece um aviso ou não, dependendo da opção -t

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
Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

    
por 07.02.2015 / 11:09

Tags