Faça login por ssh, execute um comando e não quero sair do bash

0

Eu quero mudar PS1 quando eu ssh outros centos

    strshell = 'PS1="remote!"'
    os.system("ssh -i %s -l%s -p%s %s %s"%(SSH_KEY,SSH_USER,SSH_PORT,des,strshell))  

ssh sai automaticamente. Eu quero ficar nessa concha. Como conseguir isso.

Eu apenas mudo outra maneira de fazer isso

 tin = ' sudo -i ; export PS1="Remote! \W :"; exec /bin/bash -i'
 os.system("ssh  -i%s -l%s -p%s %s -t%s" % (SSH_KEY, SSH_USER, SSH_PORT, des, tin))  

mas eu mudei o meu prompt da máquina local não o remoto. por que?
os.system é uma função python

    
por michael_stackof 26.08.2014 / 04:40

2 respostas

3

sudo -i executa um shell de login como o usuário de destino. O restante export PS1... só seria executado depois que o shell fosse finalizado.

Além disso, é provável que o seu ~/.bashrc substitua o PS1 por passá-lo no ambiente, provavelmente não ajudará.

Você pode tentar:

ssh -t host 'sudo env PROMPT_COMMAND="PS1=\"Remote! \W: \"
             unset PROMPT_COMMAND" bash -l'

(supondo que o usuário alvo ~/.bashrc não defina $PROMPT_COMMAND ).

    
por 26.08.2014 / 08:07
0

Isso parece funcionar:

ssh -t localhost "echo '. /dev/fd/2'|sudo bash -sil 2<<\FILE        
PS1='my prompt : '
exec 2>/dev/tty
exec </dev/tty
FILE
"
[sudo] password for mikeserv: 
my prompt : id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel),19(log)
my prompt : 

sudo fechará todos os descritores de arquivo, mas 0,1,2 por padrão e desejará <&0 em um terminal para a senha, mas você pode esgueirar-se com% h% com stderr . E, de qualquer maneira, não se foi para o bem - praticamente a primeira coisa que faço acima é reconectá-lo ao terminal ssh . De forma mais realista, você teria um script real que passaria por meio de $(cat file) , onde minha definição de $PS1 é e o restante. É muita indirecção irritante, no entanto; seria melhor, em vez disso, lidar com essas coisas como necessárias em perfis remotos.

    
por 27.08.2014 / 09:47