У меня есть скрипт, который использует scp
для резервного копирования некоторых файлов моего ПК на другой ПК, подключенный к локальной сети, что-то вроде этого:
#!/bin/bash
scp some_directories host@ip-address:backupFolder/
Я использую открытый ключ, поэтому он работает без вставки каких-либо пароль, я просто должен его выполнить.
Проблема заключается в том, что если я создаю резервную копию какого-либо файла с моего компьютера, а затем удаляю его (с моего компьютера, а не с удаленного), при повторном выполнении этого сценария он копирует новые файлы и перезаписывает существующие, но не удалить предыдущие резервные копии файлов, которых больше нет на моем компьютере.
Так что мне нужен способ удалить файлы с удаленного ПК с помощью какого-нибудь скрипта. Единственный известный мне способ - войти в систему с помощью ssh host@ip
, а затем использовать rm
, но, очевидно, я не могу написать такой скрипт:
#!/bin/bash
ssh host@ip-address
rm -r backupFolder/
, потому что таким образом команда rm
ищите резервную копию папки на моем компьютере, а не на удаленной.
Ваше описание немного расплывчато. Но я считаю, что вы хотите заархивировать это синхронизировать папку удаленного резервного копирования с вашим ПК (синхронизировать каталоги).
В этом случае наиболее подходящим инструментом будет rsync
вместо scp.
Хорошая новость заключается в том, что rsync
отлично работает над SSH, ваша аутентификация с открытым ключом будет работать как чудо.
Вы можете использовать команду, подобную приведенной ниже, чтобы синхронизировать резервную копию на удаленном сервере с вашим ПК.
rsync -avz --delete --progress --stats some_directories host@ip-address:backupFolder/
ПРИМЕЧАНИЕ. : будьте осторожны с обратной косой чертой rsync =>
BLOCKQUOTE>/
. Прочитайте справочные страницы.
Просто добавьте команду, которую хотите запустить удаленно.
ssh user@ip-address rm -r backupFolder/
Запускает одну команду на удаленном компьютере. Страница man клиента SSH сообщает вам такой синтаксис:
SYNOPSIS
ssh [-1246AaCfgKkMNnqsTtVvXxYy] ...more options... [user@]hostname [command]
Как вы уже упоминали в своем вопросе, следует использовать аутентификацию с открытым ключом для входа в систему без запроса пароля. Для других посетителей см. Как я могу настроить SSH-вход без пароля? для этого.
Либо у вас может быть сценарий, использующий
ssh host@ip-address << EOF
`rm foo`
exit
EOF
, либо вы можете направлять команды в ssh
, используя серьезные акценты в терминале, минуя необходимость написания сценария вообще. Например:
ssh host@ip-address:folder `rm foo`
Источник: http://www.unix.com/302265172-post2.html