ssh_config: especifique o comando a ser executado na máquina remota após o login


16

Esta é uma expansão da minha pergunta anterior . Preciso executar um comando armazenado localmente (ou seja mount /home) em uma máquina remota após o login do ssh. No momento, estou usando:

ssh -t mymachine.example.com 'mount /home ; /bin/bash'

o que funciona bem, mas eu queria saber se poderia colocar esse comando no meu .ssh/configpara não precisar digitá-lo toda vez. Encontrei uma LocalCommandopção, mas não vejo nenhuma RemoteCommandopção.

É importante e que command-to-be-executedseja armazenado na máquina local, pois conterá a senha para abrir um disco criptografado. Essa é a razão pela qual não consigo colocar o comando na .profilemáquina remota.

Respostas:


6

Esta pergunta foi feita anteriormente no SuperUser. A primeira resposta usa um arquivo remoto que não atende aos seus requisitos, mas a segunda resposta que sugere o uso de um alias local pode ser a solução para o seu problema.

É importante e que o comando a ser executado seja armazenado na máquina local, pois conterá a senha para abrir um disco criptografado. Essa é a razão pela qual não consigo colocar o comando em .profile na máquina remota.

Provavelmente isso não é seguro. Se eu usar um echocomando como um comando ssh, ele aparecerá no psservidor remoto:

martin@martin ~ % ssh dev2 "echo hello; ps aux|grep echo"

hello
root     25358  0.0  0.0   5848  1296 ?        Ss   11:27   0:00 bash -c echo hello; ps aux|grep echo
root     25362  0.0  0.0   5012   828 ?        S    11:27   0:00 grep echo

obrigado, mas a solução no SuperUser ~/.ssh/rcé armazenada novamente na máquina remota. Quanto ao seu comentário sobre psmostrar meus parâmetros de linha de comando (incluindo a senha), isso não me incomoda. É a máquina remota em que não confio. Minha máquina local é usada apenas por mim, então ninguém mais tem acesso ps.
Martin Vegter 21/09

6
Essa pssaída é da máquina remota. O ponto é: tudo o que você fornecer sshcomo comando remoto será exibido no servidor remoto em ps.
Martin von Wittich

11
Sim você está certo. Obrigado por apontar isso.
Martin Vegter 21/09

11
@MartinvonWittich - Cada site SE é independente, por isso é completamente aceitável que cada site tenha Q e A similares, desde que estejam no tópico desse site em particular. É recomendável copiar o conteúdo se um Q aparecer e o A estiver em outro site SE. Personalize-o conforme apropriado para que fique no tópico.
slm

7

Isso foi adicionado no OpenSSH 7.6:

adicione a opção RemoteCommand para especificar um comando no arquivo de configuração ssh em vez de fornecê-lo na linha de comando do cliente. Isso permite que o arquivo de configuração especifique o comando que será executado no host remoto.

ref: https://www.openssh.com/txt/release-7.6



2

Você pode fazer isso com a cooperação da máquina remota da seguinte maneira.

Na sua máquina local, insira o comando para executar na variável de ambiente LC_SSH_INITIAL_COMMAND . O SSH geralmente é configurado para passar todas as variáveis ​​de ambiente do formulário LC_*, porque essas são normalmente configurações de localidade.

Na máquina remota, execute eval "$LC_SSH_INITIAL_COMMAND" as configurações por tecla em~/.ssh/authorized_keys ou de ~/.ssh/rc(cuidado, se você tiver um~/.ssh/rc arquivo, precisará executar xauthmanualmente o encaminhamento do X11).

Com o authorized_keys método, você também pode executar um comando quando a sessão SSH terminar (a menos que o processo do shell seja interrompido abruptamente; você deve pelo menos interceptar o sinal HUP para que seu comando seja executado mesmo que a conexão morra).

No entanto, este não é um bom arranjo para se fazer algo global, como montar um sistema de arquivos. Você precisará tomar cuidado para não montar novamente se o sistema de arquivos já estiver montado (por exemplo, devido a um comando SSH em execução simultâneo) e não desmontar no logout. Minha recomendação para este caso de uso ainda é fazer a montagem explicitamente, executar comandos remotos sem fazer nada de especial e desmontar quando não desejar mais acessar esse sistema de arquivos.


0

Eu não tentei, mas poderia ser uma abordagem

  • Declarar um Subsystemno controle remotosshd_config que executa o comando desejado lendo alguns env vars
  • Use SendEnvno local .ssh/configpara passar essas chaves para o servidor remoto
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.