ssh_config: especifica o comando a ser executado na máquina remota no login

13

Esta é uma expansão da minha pergunta anterior. Eu preciso executar um comando armazenado localmente (por exemplo, mount /home ) em uma máquina remota após o logon ssh. No momento, estou usando:

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

que funciona bem, mas eu queria saber se eu poderia colocar este comando no meu .ssh/config para que eu não tenha que digitá-lo todas as vezes. Eu encontrei uma opção LocalCommand , mas não vejo nenhuma opção RemoteCommand .

Importa que command-to-be-executed seja armazenado na máquina local, pois conterá senha para abrir um disco criptografado. Essa é a razão pela qual eu não posso colocar o comando em .profile na máquina remota.

    
por Martin Vegter 21.09.2013 / 09:40

5 respostas

6

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

It is importand that the command-to-be-executed be stored on the local machine, as it will contain password to open an encrypted disk. That is the reason why I cannot put the command into .profile on the remote machine.

Isso provavelmente não é seguro. Se eu usar um comando echo como um comando ssh, ele aparecerá em ps no servidor 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
    
por 21.09.2013 / 11:29
4

Isto foi adicionado no OpenSSH 7.6:

add RemoteCommand option to specify a command in the ssh config file instead of giving it on the client's command line. This allows the configuration file to specify the command that will be executed on the remote host.

ref: link

    
por 09.10.2017 / 19:12
3

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

Na sua máquina local, coloque 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 elas são normalmente configurações locais.

Na máquina remota, execute eval "$LC_SSH_INITIAL_COMMAND" através das configurações por chave em ~/.ssh/authorized_keys ou de ~/.ssh/rc (lembre-se que se você tiver um arquivo ~/.ssh/rc , precisa cuidar de executar xauth manualmente para o encaminhamento de X11).

Com o método authorized_keys , você pode executar um comando similarmente quando a sessão SSH sair (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 se a conexão for interrompida) .

No entanto, isso não é um bom acordo para 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 simultâneo) e não desmontar no logout. Minha recomendação para esse caso de uso é ainda para fazer a montagem explicitamente, depois execute comandos remotos sem fazer nada de especial e desmonte quando não quiser mais acessar o sistema de arquivos.

    
por 22.09.2013 / 03:56
1
RemoteTTY yes
RemoteCommand screen -UDr
    
por 05.02.2018 / 13:11
0

Eu não tentei, mas uma abordagem poderia ser

  • Declare um Subsystem no controle remoto sshd_config que executa o comando desejado lendo algumas env vars
  • Use SendEnv no local .ssh/config para passar essas chaves para o servidor remoto
por 19.02.2018 / 06:27

Tags