Как удалить файл на удаленной машине через SSH с помощью Shell Script?

32

Я пишу сценарий оболочки, где мне нужно удалить файл на удаленной машине через сценарий оболочки.

Подача вручную:

ssh username@domain.com

.. тогда в домене:

cd ./some/where
rm some_file.war

Как выполнить эту задачу?

Мико
источник

Ответы:

49

Вы можете передать sshклиенту команду для выполнения вместо запуска оболочки, добавив ее в команду ssh.

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

Вам не нужно cdискать место, чтобы что-то удалить, пока вы указываете полный путь, так что это еще один шаг, который вы можете пропустить.

Следующий вопрос - аутентификация. Если вы просто запустите это, вам будет предложено ввести пароль. Если вы не хотите вводить это в интерактивном режиме, вы должны настроить аутентификацию с помощью публичного ключа.

Калеб
источник
3
Я думал, что -c был cipher_spec - нет? Я не думал, что -c был необходим для передачи команд.
Скотт С Уилсон
Спасибо всем вам, ребята, за быстрые ответы. Этот ответ содержал большинство частей решения, поэтому @Caleb на этот раз отметили.
Мика
Должны ли мы добавить -fк rmвыполнению удаленного вызова?
Федир РИХТИК
1
@ Федир НЕТ! В частности, вопрос касается файлов, а не каталогов, и если есть какие-либо предупреждения или ошибки, вызванные rmими, безусловно, следует передать вызывающей стороне, если пользователь не знает, чего ожидать и почему он что-то переопределяет. Множество ошибок и разочаровывающих отладок позже можно избежать, используя только те опции, которые вам нужны в данном сенарио.
Калеб
1
@Fedir Параметр -fдля rmявляется коротким --forceи влияет на то, есть ли ошибки для несуществующих файлов или фиктивных аргументов. Обычно команды, выполняемые в неинтерактивных оболочках, по умолчанию все равно являются менее интерактивными, но это не так, или вы получаете интерактивное приглашение, и вам нужно будет исправить настройки, непосредственно связанные с этим. Если вы пишете этот сценарий, у вас все равно не должно быть этой проблемы, и если вы находитесь в интерактивной оболочке (где у вас есть возможность катастрофических опечаток), вы должны использовать -Ion, --interactive=neverчтобы установить желаемое поведение.
Калеб
3

Если вы хотите удалить удаленный файл с использованием sudo, вам нужно выполнить что-то вроде этого:

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

Подробности .

Владислав Раструсный
источник
2

У команды ssh есть параметр команды (последний параметр в команде), который вы можете использовать для запуска удаленных команд.

Скотт К Уилсон
источник