Como usar um arquivo .bashrc personalizado no logon SSH

21

Descobri que, com a nova empresa em que estou trabalhando, muitas vezes tenho que acessar servidores linux com vida útil relativamente curta. Em cada um desses servidores, tenho uma conta, mas sempre que uma nova é criada, tenho que passar pelo trabalho de transferir pelo meu .bashrc. É possível, no entanto, que dentro de alguns meses o servidor não esteja mais por perto. Também tenho que acessar muitos outros servidores por curtos períodos de tempo (minutos), onde simplesmente não vale a pena transferir pelo meu .bashrc, mas como estou trabalhando em muitos servidores, isso gera muito tempo desperdiçado.

Não quero alterar nada nos servidores, mas fiquei pensando se havia uma maneira de ter um .bashrc "por conexão"; portanto, sempre que eu usasse o SSH para um servidor, minhas configurações seriam usadas para essa sessão.

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

gsingh2011
fonte
Esta não é uma solução por conexão, mas você ainda pode achar valiosa. Confira a base no GitHub. Mais detalhes nesta resposta na comunidade de superusuários.
codeforester

Respostas:

6

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

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

então você pode liderar com:

source .bashrc

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

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

Existem várias maneiras de ajustar esse LocalCommand para fazê-lo funcionar em seu ambiente específico - você pode se enrolar a partir de um servidor Web interno ou extrair de uma montagem nfs, por exemplo.

Quinn Murphy
fonte
Algumas notas. Antes de tudo, acho que você alterou a ordem dos arquivos no comando scp, já que quero transferir meu bash para o servidor e acho que você o inverteu. Em segundo lugar, você pode simplesmente adicionar ; source /path/to/.bashrcapós o comando scp para que ele seja originado automaticamente. Finalmente, um aspecto negativo não muito importante desse método é que eu tenho que digitar minha senha duas vezes. Mas no final funcionou, então obrigado.
precisa saber é o seguinte
me desculpe por isso! Estava malhando, sinto muito pela confusão. Você é capaz de definir configurações de chave sem senha no seu ambiente? Temos isso em nosso ambiente e é uma coisa bonita. Ainda bem que funcionou!
Quinn Murphy
@ gsingh2011: Isso source /path/to/.bashrcserá executado na máquina da qual você está se conectando. Os comandos LocalCommandnão têm acesso à sessão ssh.
22412 Oliver
@ Oliver Você está certo. Decidi automatizar o fornecimento do .bashrc a partir do computador remoto. Eu tenho que mudar algumas coisas no lado do servidor no primeiro login, mas é muito mais conveniente do que o que eu tinha que fazer antes.
gsingh2011
16

Acho que sshrc é o que você está procurando: https://github.com/Russell91/sshrc

O sshrc funciona da mesma maneira que o ssh, mas também gera ~ / .sshrc após o logon remotamente.

$ 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 pós-login. É simples e não afetará outros usuários no servidor - mesmo que eles usem sshrc também. Para uma configuração mais avançada, continue lendo.

RussellStewart
fonte
Pare de enviar spam apenas com postagens de link. Você é perfeitamente capaz de adicionar comentários (que são os seus posts relacionados ao sshrc, pelo menos).
Deer Hunter
3
Estou trabalhando para consertar todos eles!
RussellStewart
Feito. Na primeira vez, fiquei tentado a fazer um pequeno post apenas para links. Agora eu sei melhor.
RussellStewart
1
Escrevi há muito tempo (antes do sshrc) um simil sshrc: github.com/fsquillace/pearl-ssh É apenas mais eficiente, pequeno e sem dependências xxd.
user967489
1

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

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

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

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

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

Dr. Edward Morbius
fonte
0

Não sei se existe um .bashrc por sessão.

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

Talvez apenas crie uma pasta com todas as suas configurações com caminhos e apenas transfira-as com scp

gostar

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

e então um

scp -r /home/foobar/configs/* foo@example.com:/home/foo/

Isso economiza tempo.

Christopher Perrin
fonte
0

Eu não acho que isso é 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 inicial remoto quando fizer login pela primeira vez.
  2. Use o NFS para montar seu diretório pessoal contendo o .bashrc em todos os servidores. Dessa forma, você tem as mesmas configurações em todos os lugares.
  3. Se você concorda com apenas algumas variáveis ​​de ambiente transmitidas aos servidores remotos, verifique a SendEnvopção (consulte a ssh_configpágina de manual para obter mais informações). Se o servidor estiver configurado corretamente (ou seja, ele possui o adequado AcceptEnvem sshd_config), você pode usar SendEnvpara copiar suas variáveis ​​de ambiente para o host remoto.
  4. Não sei se isso funciona, mas talvez você possa usar mal a ProxyCommandconfiguração (consulte a ssh_configpágina de manual) para enviar seus .bashrcou outros arquivos antes de se conectar ao host remoto. Isso exigiria alguns testes, no entanto. Além disso, esteja preparado para que isso possa interferir no scp.
Oliver
fonte
0

Acho que https://github.com/fsquillace/pearl-ssh faz o que você precisa.

Eu escrevi há muito tempo antes do sshrc nascer e ele tem mais benefícios em comparação com o sshrc:

  • Não requer dependências no xxd para os dois 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 (realmente fáceis de entender!)

Por exemplo:

$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
user967489
fonte