Jak usunąć plik na zdalnym komputerze za pośrednictwem SSH przy użyciu skryptu powłoki?

32

Piszę Skrypt Shell, w którym muszę usunąć plik na zdalnym komputerze za pomocą Skryptu Shell.

Przepływ ręcznie:

ssh username@domain.com

.. następnie w domenie:

cd ./some/where
rm some_file.war

Jak wykonać to zadanie?

mico
źródło

Odpowiedzi:

49

Możesz przekazać sshklientowi polecenie do wykonania zamiast uruchomienia powłoki, dołączając ją do polecenia ssh.

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

Nie musisz udawać się cddo lokalizacji, aby coś usunąć, o ile określisz pełną ścieżkę, więc jest to kolejny krok, który możesz pominąć.

Następne pytanie to uwierzytelnienie. Jeśli to uruchomisz, pojawi się monit o podanie hasła. Jeśli nie chcesz wprowadzać tego interaktywnie, powinieneś skonfigurować uwierzytelnianie publickey.

Caleb
źródło
3
Myślałem, że -c to cipher_spec - nie? Nie sądziłem, że -c było wymagane do przekazania polecenia.
Scott C Wilson,
Dziękuję wam wszystkim za szybkie odpowiedzi. Ta odpowiedź zawierała większość części rozwiązania, więc @Caleb tym razem dostał odpowiedź.
mico
Czy powinniśmy dodawać -fdo rmwykonywania połączeń zdalnych?
Fedir RYKHTIK
1
@Fedir NO! Pytanie dotyczy w szczególności plików, a nie katalogów, a jeśli pojawią się jakieś ostrzeżenia lub błędy rm, powinny one zostać przekazane do osoby dzwoniącej, chyba że użytkownik wie, czego się spodziewać i dlaczego coś przesłania. Wiele błędów i frustrujących debugowania później można uniknąć, korzystając tylko z opcji potrzebnych w danym senario.
Caleb
1
@Fedir -fOpcja to rmjest skrótem --forcei ma wpływ na to, czy w przypadku nieistniejących plików lub fałszywych argumentów wyświetlane są błędy. Zwykle polecenia są uruchamiane przez powłoki nieinteraktywne, tak czy inaczej domyślnie są mniej interaktywne, ale tak nie jest lub pojawia się interaktywny monit, co należy zrobić, aby naprawić ustawienia bezpośrednio z tym związane. Jeśli skryptów to nie powinien mieć tę kwestię tak, i jeśli jesteś w interaktywnej powłoki (gdzie masz możliwość katastroficznych literówek) należy użyć -Ina --interactive=neverustawić pożądane zachowanie.
Caleb
3

Jeśli chcesz usunąć zdalny plik za pomocą sudo, musisz wykonać coś takiego:

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

Szczegóły .

Vladislav Rastrusny
źródło
2

Polecenie ssh ma parametr polecenia (ostatni parametr w poleceniu), którego można użyć do uruchomienia poleceń zdalnych.

Scott C. Wilson
źródło