¿Cómo eliminar un archivo en una máquina remota a través de SSH utilizando un Shell Script?

32

Estoy escribiendo un Shell Script donde tengo que eliminar un archivo en una máquina remota a través de un Shell Script.

Flujo manual:

ssh username@domain.com

.. luego en el dominio:

cd ./some/where
rm some_file.war

¿Cómo lograr esa tarea?

mico
fuente

Respuestas:

49

Puede pasarle al sshcliente un comando para ejecutar en lugar de iniciar un shell agregándolo al comando ssh.

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

No tiene que ir cda una ubicación para eliminar algo siempre que especifique la ruta completa, por lo que ese es otro paso que puede omitir.

La siguiente pregunta es la autenticación. Si solo ejecuta eso, se le pedirá una contraseña. Si no desea ingresar esto de manera interactiva, debe configurar la autenticación de clave pública.

Caleb
fuente
3
Pensé -c era cipher_spec - ¿no? No pensé que -c fuera necesario para pasar el comando.
Scott C Wilson
Gracias a todos ustedes por las respuestas rápidas. Esta respuesta fue la que contenía la mayor parte de las partes de la solución, por lo que @Caleb obtuvo el tic esta vez.
mico
¿Deberíamos agregar -fa la rmejecución de llamadas remotas?
Fedir RYKHTIK
1
@Fedir NO! La pregunta se refiere específicamente a los archivos, no a los directorios, y si hay advertencias o errores que arrojen rm, sin duda deberían transmitirse a la persona que llama a menos que el usuario sepa qué esperar y por qué están anulando algo. Muchos errores y depuración frustrante más adelante se pueden evitar utilizando solo las opciones que necesita en un senario determinado.
Caleb
1
@Fedir La -fopción rmes abreviatura --forcey tiene un efecto sobre si se detectan errores para archivos no existentes o argumentos falsos. Por lo general, los comandos que se ejecutan sobre shells no interactivos por defecto son menos interactivos de todos modos, pero no lo es o si recibe un mensaje interactivo, lo que debería hacer sería corregir la configuración directamente relacionada con eso. Si está presente scripting que no debería tener ese problema de todos modos, y si usted está en un shell interactivo (donde se tiene la posibilidad de errores tipográficos catastróficos) se debe utilizar -Ien --interactive=neverconfigurar el comportamiento deseado.
Caleb
3

Si desea eliminar el archivo remoto con el uso de sudo, debe ejecutar algo como esto:

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

Detalles .

Vladislav Rastrusny
fuente
2

El comando ssh tiene un parámetro de comando (último parámetro en el comando) que puede usar para ejecutar comandos remotos.

Scott C Wilson
fuente