Configurando a variável hostname logo após o login SSH

3

Eu configurei alguns scripts de shell (de terceiros), que devem se conectar ao host remoto e iniciar alguns daemons (hadoop, se isso for importante). Esses scripts dependem muito do nome do host para configurar pastas pid, diretórios de dados, etc.

O que eu preciso fazer agora é criar algum ambiente de teste / desenvolvimento em uma única máquina, usando o Arch, o que significa:

  • configure / etc / hosts para fornecer alguns aliases para 127.0.0.1, como data1, data2, data3 (essa é a parte trivial)
  • configura o acesso SSH sem senha ao host local (que também é trivial)
  • de alguma forma define o nome do host para a sessão SSH atual, como se eu conectasse usando 'ssh data1' - então o nome do host deveria ser "data1" - e é isso que eu não consigo descobrir.

então eu preciso resolver 2 problemas:

  • como faço para passar alguma variável de ambiente ou algo assim para o host remoto, assim será visível para todos os scripts lá
  • como defino o nome do host no host remoto somente para essa sessão

e tudo isso acontece no mesmo computador.

    
por jdevelop 17.10.2013 / 04:32

3 respostas

1

Embora não seja possível alterar o nome do host para um único processo (bem, é possível com namespaces), é possível alterar a variável de ambiente HOSTNAME .

Quanto ao encaminhamento de variáveis environmnet de cliente para servidor, consulte as AcceptEnv e PermitUserEnvironment optins para sshd e SendEnv para ssh (consulte as páginas man sshd_config(5) e ssh_config(5) para obter detalhes).

    
por 17.10.2013 / 07:47
2

O nome do host de um sistema não é algo que você pode definir programaticamente como apenas um uso regular, nem existe uma variável de ambiente que efetivamente altere isso.

Você pode ver uma variável como $HOSTNAME , mas isso geralmente é apenas por conveniência e não altera o nome do host de seus sistemas de nenhuma maneira significativa.

Acho que se fosse você escolheria uma variável de ambiente escolhida por mim e a configuraria no momento do login como parte do ambiente do usuário, e então usaria essa variável no fluxo dentro dos scripts, em vez de tentar coexistir op o nome do host real do sistema.

O comando hostname

Você pode alterar o nome de um sistema de maneira flexível, emitindo o comando:

$ sudo hostname <somename>

No entanto, esta abordagem pode ser complicada, dado que o nome do host é frequentemente armazenado em uma variedade de locais, alguns dos quais são lidos apenas uma vez durante a inicialização e nunca mais.

Dado isso, eu acho que é um caminho difícil, e será feito com muito hacking e slashing para substituir o nome do host do sistema de uma maneira fácil.

Vou deixar este guia que mostra algumas das coisas que provavelmente o atrapalharão quando você tentar fazer isso. É intitulado: Como alterar o nome do host de um sistema Linux .

    
por 17.10.2013 / 04:51
0

O SSH geralmente é configurado para passar algumas variáveis de ambiente consideradas seguras e independentes do sistema, ou seja, variáveis de ambiente relacionadas ao código de idioma: LC_* . Assim, em muitas instalações, você pode transmitir dados pelo ambiente definindo uma variável como LC_DESIRED_HOSTNAME . Quais variáveis de ambiente que o servidor permite que você passe são determinadas pela configuração AcceptEnv em sshd_config , e quais variáveis de ambiente o cliente tenta transmitir são determinadas pela configuração SendEnv em ~/.ssh/config .

Você pode definir o nome do host para todos os processos até a próxima reinicialização chamando o comando hostname com um argumento como root.

No Linux, se você executar unshare -u someprogram , então someprogram e seus subprocessos serão executados em um namespace separado, o qual tem seu próprio nome de host. O nome do host dentro do namespace começa idêntico ao resto do sistema, mas pode ser alterado independentemente. Isso precisa ser feito como root, a menos que sua versão do kernel seja 3.8 ou superior.

unshare -u -- sh -c 'hostname "$LC_HOSTNAME"; service hadoop start'
    
por 17.10.2013 / 23:06