Empurrando meu prompt do PS1 por ssh

17

Eu uso um prompt específico do PS1 que eu gosto. Eu compartilho alguns logins com outras pessoas em alguns servidores diferentes. Eu queria saber se havia uma maneira de especificar no meu perfil bash local um prompt remoto ou de qualquer outra forma, em seguida, copiar e colar cada vez que eu remoto em.

    
por Unfundednut 11.12.2010 / 19:32

8 respostas

13

Carregue um arquivo em cada máquina remota, diga ~/.my_custom_bashrc , com sua configuração bash personalizada (nesse caso, PS1=... ) e, em seguida, inicie ssh com:

ssh user@host -t "bash --rcfile ~/.my_custom_bashrc -i"

Você pode usar facilmente uma função bash como invólucro para facilitar a leitura.

    
por 11.12.2010 / 21:02
9

Se você quiser apenas enviar a variável PS1 e ela não contiver um ' (aspas simples), tente:

ssh targethost -t "PS1='$PS1'; exec bash"

O local .bashrc pode sobrescrever PS1 (graças a Dennis Williamson por apontar isto).

Existem maneiras para transmitir variáveis de ambiente sobre ssh , mas elas geralmente são desabilitadas na configuração do servidor. Se a diretiva PermitUserEnvironment estiver ativada na configuração do servidor e cada usuário tem seu próprio par de chaves (sim, você pode não ter tanta sorte), você pode adicionar environment="PS1=…" à linha em ~/.ssh/authorized_keys correspondente à sua chave.

Se quiser manter sua própria configuração em uma conta de usuário compartilhada, você pode criar seu próprio diretório de arquivo de configuração e definir a variável de ambiente HOME para apontar para esse diretório.

ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/

Crie links simbólicos no diretório mrstatic.home apontando para a entrada correspondente no diretório pai quando você quiser compartilhar um arquivo com os outros usuários.

Em seguida, faça o login com

ssh targethost -t 'HOME=~/mrstatic.home; exec bash''

Se você estiver disposto a modificar o .profile (ou outro arquivo de inicialização), provavelmente poderá automatizar suas configurações. Muitos sites permitem que LC_* variáveis de ambiente (normalmente elas são usadas para configurações de localidade). Se ambas as condições forem atendidas, você poderá definir uma variável que não é realmente usada para localidades, digamos LC_USER , no lado do cliente, e testá-la no servidor .profile .

(É claro que as contas compartilhadas são uma má ideia, mas percebo que você pode não estar em condições de mudar essa situação.)

    
por 12.12.2010 / 00:28
2

Coloque seu prompt PS1 em ~ / .ssh / environment e a sessão ssh irá carregá-lo para todos os hosts que você fizer login. Funciona para mim com o openssh 4.3p2.

    
por 21.07.2011 / 19:40
2
ssh -t user@host "remote='$PS1' bash -i"

Então, no prompt:

PS1=$remote
    
por 11.12.2010 / 20:48
1

você pode especificar variáveis de ambiente no lado do cliente e, se o servidor ssh permitir (verifique man sshd-config), essas variáveis serão copiadas para a sessão quando você efetuar login na máquina.

então, você teria que configurar o .bashrc no servidor para verificar um PS1 existente (ou qualquer variável) e apenas definir PS1 se ele ainda não estiver definido.

ou, o que torna as coisas mais simples, você agrupa suas configurações em uma função e implementa essa função como um arquivo especial, sua origem sob demanda ( source joes_bashrc ) ou diretamente para o .bashrc. ter seu próprio arquivo parece um pouco mais robusto. as outras pessoas podem usar suas configurações, mas não são forçadas a fazê-lo.

    
por 11.12.2010 / 20:39
1

Não compartilhe logins. SSH como você mesmo, então faça sudo -su shareduser ( -s significa "shell").

Faça sudo manter seu diretório pessoal:

Defaults env_keep += "HOME"
    
por 11.12.2010 / 21:25
1

Se você quer fazer isso sem precisar de um scp extra, você pode fazer algo assim:

ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'

Isso gerará um .bashrc.n baseado nos servidores, mas com suas substituições.

    
por 25.08.2012 / 12:26
-2

Você pode fazer coisas como montar a sua casa em sshfs / nfs, mas a solução mais fácil é deslocar o seu hub para a nova máquina. Isso também traz apelidos e outras coisas.

    
por 11.12.2010 / 20:02