Como excluir um arquivo na máquina remota via SSH usando um Shell Script?

32

Estou escrevendo um Shell Script em que tenho que excluir um arquivo em uma máquina remota por meio de um Shell Script.

Fluir manualmente:

ssh username@domain.com

.. então no domínio:

cd ./some/where
rm some_file.war

Como realizar essa tarefa?

mico
fonte

Respostas:

49

Você pode transmitir ao sshcliente um comando para executar no lugar de iniciar um shell anexando-o ao comando ssh.

ssh username@domain.com 'rm /some/where/some_file.war'

Você não precisa ir cda um local para remover algo, desde que especifique o caminho completo; portanto, é outra etapa que você pode pular.

A próxima pergunta é autenticação. Se você acabou de executar isso, você será solicitado a fornecer uma senha. Se você não quiser inserir isso interativamente, configure a autenticação de chave pública.

Caleb
fonte
3
Eu pensei -c era cipher_spec - não? Não achei que -c fosse necessário para a passagem de comandos.
C # # # # # # # # # # #
Obrigado a todos por respostas rápidas. Esta resposta foi a que continha a maior parte das partes da solução, de modo que o @Caleb recebeu o sinal dessa vez.
Mico
Devemos adicionar -fà rmexecução de chamadas remotas?
Fedir RYKHTIK
1
@Fedir NO! A pergunta é específica sobre arquivos, não diretórios, e se houver algum aviso ou erro lançado, rmeles certamente devem ser repassados ​​ao chamador, a menos que o usuário saiba o que esperar e por que está substituindo alguma coisa. Muitos erros e a depuração frustrante posteriormente podem ser evitados usando apenas as opções necessárias em um determinado senário.
Caleb
1
@Fedir A -fopção to rmé abreviada --forcee afeta os erros de arquivos inexistentes ou argumentos falsos. Geralmente, os comandos executam sobre shells não interativos, por padrão, sendo menos interativos, mas você não é ou está recebendo um prompt interativo, o que fazer é corrigir as configurações diretamente relacionadas a isso. Se você está scripting isso você não deve ter esse problema de qualquer maneira, e se você estiver em um shell interativo (onde você tem a possibilidade de erros catastróficos) você deve usar -Iem --interactive=neverdefinir o seu comportamento desejado.
Caleb
3

Se você deseja excluir um arquivo remoto com o uso do sudo, é necessário executar algo como isto:

ssh -tt user@host 'stty raw -echo; sudo rm /path/to/file' < <(cat)

Detalhes .

Vladislav Rastrusny
fonte
2

O comando ssh possui um parâmetro de comando (último parâmetro no comando) que você pode usar para executar comandos remotos.

Scott C Wilson
fonte