Как изменить файл на удаленном компьютере?
Имеется:
- На удаленном компьютере(Linux) лежит файл.
- строка с данными.
Необходимо:
- подключиться к компьютеру,
- прочитать данный файл. Если в файле имеется искомая строка с данными, то завершаем выполнение, иначе добавляем строку в конец файла.
Чтение файла, поиск и добавление строки - сделал, на локальном компьютере работает. Подскажите, пожалуйста, как проделать все это на удаленном компьютере?
Ответы (3 шт):
"Родной" протокол для передачи информации между серверами Linux - SSH. Также существует протокол SFTP - он работает поверх SSH и позволяет передавать файлы или информацию о них.
Для Python существует модуль PySftp - он хоть и староват, но вполне работоспособен. Документацию по модулю можно найти на PyPi: https://pypi.org/project/pysftp/.
Если по простому делать,
то можно использовать что-то от @Даниил_Чижевский или rsync:
скачали-обработали-закачали.
Но возможны сложные случаи:
Если один и тот же скрипт запускается одновременно несколько раз, например из веб сервера с разными искомыми строками, то в файле в результате окажется непонятно что.
Если взломают компьютер со скриптом, могут получить доступ и к удаленному с файлом.
Так что задача может усложниться до своего веб сервиса на удаленном компьютере:
- с API (POST /add-str)
- с проверкой доступа.
- с блокировкaми файла (
flock) или базой данных с атомарной операцией.
ssh user@host "if ! grep icq /path/to/file; then echo appendix >> /path/to/file; fi"
- логинимся на
hostкак пользовательuser - проверяем при помощи
grepналичие строки, которая содержитicq - в случае, если
grepне нашел строку, добавляем в конец файлаappendix.
Без питона но логика тут такая - на удаленном хосте должен работать хоть какой-то сервис sshd, Apache, ftpd и тд.
В случае sshd у пользователя должны быть права на чтение запись в желаемый файл.