Como usar um arquivo .bashrc personalizado no login do SSH

18

Descobri que, com a nova empresa com a qual estou trabalhando, muitas vezes tenho que acessar servidores linux com vidas úteis relativamente curtas. Em cada um desses servidores eu tenho uma conta, mas sempre que um novo é criado, eu tenho que passar pelo incômodo de transferir o meu .bashrc. É possível, no entanto, que daqui a alguns meses o servidor não esteja mais por perto. Eu também tenho que acessar muitos outros servidores por curtos períodos de tempo (minutos), onde não vale a pena transferir o meu .bashrc, mas como estou trabalhando em muitos servidores, isso resulta em muito tempo perdido.

Eu não quero mudar nada nos servidores, mas eu queria saber se havia uma maneira de ter um "por conexão" .bashrc, então sempre que eu iria SSH para um servidor minhas configurações seriam usadas para esse sessão.

Se isso for possível, seria legal se eu pudesse fazer a mesma coisa com outros arquivos de configuração, como arquivos gitconfig.

    
por gsingh2011 20.06.2012 / 15:01

6 respostas

5

Eu acho que o que você quer é (no seu .ssh / config na máquina que você se conecta):

PermitLocalCommand yes
LocalCommand scp yourname@someserver:/dir/dotbash /local/home/dir/.bashrc

então você pode começar com:

source .bashrc

e esteja no seu caminho alegre. O LocalCommand executa o comando no servidor ao qual você está se conectando quando chega lá, logo antes da sessão atual.

Eu também garantiria que os sshds nos servidores estivessem configurados com o PermitLocalCommand yes

Existem várias maneiras de você ajustar o LocalCommand para que ele funcione em seu ambiente específico - você pode fazer curvas a partir de um servidor da Web interno ou extrair de uma montagem nfs, por exemplo.

    
por 21.06.2012 / 03:42
15

Eu acho que o sshrc é o que você está procurando: link

sshrc works just like ssh, but it also sources ~/.sshrc after logging in remotely.

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to 'cd ..'

Você pode usar isso para definir variáveis de ambiente, definir funções e executar comandos de pós-login. É simples assim, e não afetará outros usuários no servidor - mesmo se eles usarem o sshrc também. Para uma configuração mais avançada, continue lendo.

    
por 12.09.2014 / 09:28
1

Se você nunca acessou o servidor antes, não haverá entrada em ~ / .ssh / known_hosts para ele.

Você pode procurar por um determinado host conhecido com "ssh-keygen -F", mas terá que testar essa saída (grep), pois ssh-keygen não retorna false por um erro. Observe que, se você se referir a um host por diferentes identificadores (endereço IP, nome do host, FQDN), cada um deles será tratado como instâncias separadas.

Você pode escrever um wrapper para o ssh que transfere seu ambiente de usuário para esse host no primeiro login:

ssh-newenv () {se! ssh-keygen -F $ 1 | grep -q "^ # host $ 1 encontrado:"; então rsync ~ / .bashrc ~ / .bash_profile ~ / .bash_logout $ 1:. fi; ssh $ 1; }

Se você quiser torná-lo mais robusto, verifique a existência de um arquivo de ambiente conhecido, um hash ou outro marcador no host remoto.

    
por 21.06.2012 / 02:51
0

Não sei se há uma sessão por sessão .bashrc.

Outra solução seria escrever um pequeno script que transfere todas as suas configurações favoritas para sua nova pasta pessoal.

Talvez apenas crie pastas com todas as suas configurações com caminhos e apenas as transfira com scp

como

/home/foobar/configs/.bashrc
/home/foobar/configs/.foo/bar.conf
...

e depois um

scp -r /home/foobar/configs/* [email protected]:/home/foo/

Isso economiza tempo.

    
por 20.06.2012 / 15:55
0

Eu não acho que isso seja possível, dado que o ssh não tem nada a ver com o seu .bashrc . É o shell que carrega esse arquivo, não o ssh.

Algumas ideias:

  1. Configure seu diretório pessoal remoto quando você fizer login pela primeira vez.
  2. Use o NFS para montar seu diretório pessoal contendo seu .bashrc em todos os servidores. Dessa forma, você tem as mesmas configurações em todos os lugares.
  3. Se você está bem apenas com algumas variáveis de ambiente transmitidas aos servidores remotos, você deve verificar a opção SendEnv (veja a página ssh_config man para mais informações). Se o servidor estiver configurado corretamente (ou seja, tiver o AcceptEnv adequado em sshd_config), você poderá usar SendEnv para copiar suas variáveis de ambiente para o host remoto.
  4. Não sei se isso funciona, mas talvez você possa usar mal a configuração ProxyCommand (consulte a página ssh_config man) para enviar seus .bashrc ou outros arquivos antes de se conectar ao host remoto. Isso exigiria alguns testes, no entanto. Além disso, esteja preparado para que isso interfira com o scp.
por 20.06.2012 / 15:58
0

Acho que o link faz o que você precisa.

Eu escrevi isso há muito tempo antes do sshrc nascer e ele tem mais benefícios comparado ao sshrc:

  • Ele não exige dependências no xxd para ambos os hosts (que podem estar indisponíveis no host remoto)
  • O Pearl-ssh usa um algoritmo de codificação mais eficiente
  • São apenas 20 linhas de código (muito fáceis de entender!)

Por exemplo:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl [email protected]
myserver.com $> q
exit
    
por 06.06.2015 / 19:32