Execute um comando remoto usando o arquivo de configuração ssh

32

Eu gostaria de poder configurar um comando para executar no logon ssh em um servidor, sem precisar digitá-lo. Basicamente, estou procurando o arquivo de configuração ssh equivalente a:

ssh host command

para que tudo que eu precise digitar seja:

ssh host

e o comando é executado.

PeterJCLaw
fonte

Respostas:

16

Também é possível inserir um comando no seu arquivo de chaves autorizado. ( ~/.ssh/authorized_keys) Isso permite que você execute um comando personalizado para cada chave no arquivo. Eu uso isso para encaminhar conexões shell através do meu firewall. O resultado é que eu posso ssh para um host e ele conecta automaticamente a sessão a um host dentro da rede. A authorized_keysentrada fica assim:

command="ssh -Tq <hostname> \"$SSH_ORIGINAL_COMMAND\"",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAA... the rest of the key ...

Mais especificamente, o redirecionamento é para minha instância de gitolite. Isso permite acesso externo simples, sem expor diretamente o host gitolite a qualquer acesso externo. Verifique a página do manual para mais informações. ( http://linux.die.net/man/8/sshd )

dav
fonte
11
Isso é incrível, não sabia que você poderia fazer isso. +1
Brian Wigginton 24/09
3
Se você colocar o comando no seu arquivo allowed_keys, ele quebrará coisas como rsync e scp - você terá algo parecido com isto: abrir terminal falhou: não um terminal. Além disso, esteja ciente de que, se o comando falhar, você não poderá fazer login. Eu descobri isso da maneira mais difícil.
John Hunt
11

Se você estiver executando o OpenSSH, parece que ele ~/.ssh/rcé executado após o login .

coneslayer
fonte
3
Está /.ssh/rclocalizado na máquina cliente ou servidor? Parece com os documentos do servidor, certo?
heavyd
11
Sim, isso estaria na máquina do servidor.
coneslayer
Infelizmente, o rcarquivo parece não conseguir executar coisas como screen, recebendo um erro "Deve ser conectado a um terminal"
davidparks21
10

Você pode configurar um alias do bash.

No seu arquivo .bashrc, coloque:

alias ssl='ssh some_host run_command'

Então você nem precisaria digitar o nome do host.

Ou, se você quiser fazer isso com vários hosts (e vários aliases não funcionarem), use um pequeno script:

kevin@box:~$ cat ssl.sh
#!/bin/sh
ssh $1 some_command
kevin@box:~$
Kevin M
fonte
2

Você resolve isso a frio .ssh/config file, para o host em que deseja executar um comando, adicione

  RequestTTY yes
  RemoteCommand <some command>

onde <some command>está seu comando Isso também funciona com screen ou tmux.

Florian Lautenschlager
fonte