ssh, inicia um shell específico e executa um comando na máquina remota?

11

Estou em uma situação em que vários usuários compartilham a mesma conta de usuário em uma máquina remota. Eu tenho um diretório "pessoal" onde eu escrevi meu próprio arquivo .zshrc , e eu gostaria de ter uma maneira de:

  1. Iniciar uma sessão ssh na máquina remota com diretivas do meu arquivo de configuração ssh (por exemplo, ControlMaster auto )
  2. Esta sessão executa um shell Z
  3. Ele executa um .zshrc no meu diretório "pessoal" (não no diretório inicial do usuário compartilhado)

Seria bom ter um alias ou uma maneira simples de iniciar essas sessões ssh (é por isso que pensei em usar o arquivo de configuração do OpenSSH), mas estou aberto a outras idéias!

Usando o arquivo de configuração do OpenSSH?

Eu li no ssh_config página man do OpenSSH que eu posso usar o diretiva LocalCommand para especificar um comando para executar localmente após conectar-se com êxito ao servidor. Isso me fez pensar que pode haver uma maneira de dizer ao arquivo config qual comando executar remotamente após conectar-se ao servidor, mas parece não haver nenhum.

    
por Amelio Vazquez-Reina 14.09.2011 / 23:28

2 respostas

15

A maneira mais óbvia de executar um comando remotamente é especificá-lo na linha de comando ssh. O comando ssh é sempre interpretado pelo shell do usuário remoto.

ssh [email protected] '. ~/.profile; command_that_needs_environment_variables'
ssh -t [email protected] '. ~/.profile; exec zsh'

Contas compartilhadas geralmente são uma má ideia; se possível, consiga contas separadas para cada usuário. Se você está preso a uma conta compartilhada, pode criar um alias:

ssh -t [email protected] 'HOME=~/bob; . ~/.profile; exec zsh'

Se você usar a autenticação de chave pública (novamente, recomendado), poderá definir comandos por chave em ~/.ssh/authorized_keys . Veja esta resposta para mais explicações. Edite a linha da sua chave em ~/.ssh/authorized_keys no servidor (tudo em uma linha):

command="HOME=$HOME/bob;
     if [ -n \"$SSH_ORIGINAL_COMMAND\" ]; then
       eval \"$SSH_ORIGINAL_COMMAND\";
     else exec \"$SHELL\"; fi" ssh-rsa AAAA…== [email protected]
    
por 15.09.2011 / 01:42
-3

Para executar um comando remotamente depois de conectar o servidor, inclua em seu arquivo .ssh / config o seguinte snippet

PermitLocalCommand yes

Host <server-ip-address>
    LocalCommand *command*
    
por 14.09.2011 / 23:47

Tags