Come eliminare un file su una macchina remota tramite SSH usando uno script di shell?


32

Sto scrivendo uno script di shell in cui devo eliminare un file su una macchina remota tramite uno script di shell.

Flusso manuale:

ssh username@domain.com

.. quindi nel dominio:

cd ./some/where
rm some_file.war

Come eseguire quel compito?

Risposte:


49

È possibile passare al sshclient un comando da eseguire al posto dell'avvio di una shell aggiungendolo al comando ssh.

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

Non è necessario cdun percorso per rimuovere qualcosa, purché si specifichi il percorso completo, quindi è un altro passaggio che è possibile saltare.

La prossima domanda è l'autenticazione. Se lo esegui, ti verrà richiesta una password. Se non si desidera inserirlo in modo interattivo, è necessario impostare l'autenticazione con chiave pubblica.


3
Ho pensato -c era cipher_spec - no? Non pensavo che -c fosse richiesto per passare il comando.
Scott C Wilson,

Grazie a tutti voi ragazzi per le risposte rapide. Questa risposta è stata quella contenente la maggior parte delle parti della soluzione, quindi questa volta @Caleb ha ottenuto il segno di spunta.
mico,

Dovremmo aggiungere -falla rmesecuzione di chiamata remota?
Fedir RYKHTIK

1
@Fedir NO! La domanda si pone specificamente riguardo ai file e non alle directory e se ci sono avvertimenti o errori lanciati rm, dovrebbero certamente essere passati al chiamante a meno che l'utente non sappia cosa aspettarsi e perché stiano scavalcando qualcosa. Molti errori e frustranti debug in seguito possono essere evitati utilizzando solo le opzioni necessarie in un determinato senario.
Caleb,

1
@Fedir L' -fopzione per rmè abbreviata --forcee ha un effetto sul fatto che gli errori siano indicati per file inesistenti o argomenti fasulli. Di solito i comandi vengono eseguiti su shell non interattive per impostazione predefinita, essendo comunque meno interattivi, ma non lo è o non si riceve un prompt interattivo, la cosa da fare sarebbe correggere le impostazioni direttamente correlate a questo. Se stai scrivendo questo script non dovresti avere quel problema in ogni caso, e se ti trovi in ​​una shell interattiva (dove hai la possibilità di errori di battitura catastrofici) dovresti usare -Isu --interactive=neverper impostare il comportamento desiderato.
Caleb,

3

Se si desidera eliminare il file remoto con l'uso di sudo, è necessario eseguire qualcosa del genere:

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

Dettagli .


2

Il comando ssh ha un parametro di comando (ultimo parametro nel comando) che è possibile utilizzare per eseguire comandi remoti.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.