Как изменить файл на удаленном компьютере?

Имеется:

  • На удаленном компьютере(Linux) лежит файл.
  • строка с данными.

Необходимо:

  • подключиться к компьютеру,
  • прочитать данный файл. Если в файле имеется искомая строка с данными, то завершаем выполнение, иначе добавляем строку в конец файла.

Чтение файла, поиск и добавление строки - сделал, на локальном компьютере работает. Подскажите, пожалуйста, как проделать все это на удаленном компьютере?


Ответы (3 шт):

Автор решения: Даниил Чижевский

"Родной" протокол для передачи информации между серверами Linux - SSH. Также существует протокол SFTP - он работает поверх SSH и позволяет передавать файлы или информацию о них.

Для Python существует модуль PySftp - он хоть и староват, но вполне работоспособен. Документацию по модулю можно найти на PyPi: https://pypi.org/project/pysftp/.

→ Ссылка
Автор решения: Sergei Kirjanov

Если по простому делать, то можно использовать что-то от @Даниил_Чижевский или rsync: скачали-обработали-закачали.

Но возможны сложные случаи:

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

Если взломают компьютер со скриптом, могут получить доступ и к удаленному с файлом.

Так что задача может усложниться до своего веб сервиса на удаленном компьютере:

  • с API (POST /add-str)
  • с проверкой доступа.
  • с блокировкaми файла (flock) или базой данных с атомарной операцией.
→ Ссылка
Автор решения: Hellseher
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 у пользователя должны быть права на чтение запись в желаемый файл.

→ Ссылка