LINUX.ORG.RU
решено ФорумAdmin

Синхронизация локальных файлов на удаленную машину только по SSH

 , ,


0

2

удаленная машина — не компьютер, а железяка с бизибоксом, SSH есть, но rsync-а нет. Там недоступная для записи (без перепрошивки) файловая система, кроме /tmp.

Надо в /tmp/dir в одну сторону синхрить все с локальной папки. До сих пор юзал nfs и не тужил, но на этой конкретно все вусмерть зафаеволено (нфс не коннектится). Хочется что-то типа scp -r, только чтоб не копировал неизмененные и, желательно, чтоб сам ловил момент изменеия.

Я такое могу наколхозить, но уверен в том, что есть готовое.

Спасибо

★★★★★

sshfs забыл написать тоже не работает — сразу пишет дисконнектед

pihter ★★★★★ ()

Попробуй lftp, там есть команда mirror

deadNightTiger ★★★★★ ()

блджад, даже scp не работает. Но на удаленной девайсине есть sftp сервер и он успешно работет, даже mc-шкой ходить можно

pihter ★★★★★ ()
Ответ на: комментарий от intelfx

там мипс какой-то, ща пока с тулчейном провожусь снег выпадет

pihter ★★★★★ ()
Ответ на: комментарий от pihter

Была ещё такая штука, в кде использовалось, называется, если я правильно помню, fish но не тот который шелл, а скрипт для эмуляции scp на серверах, где scp нет, а только голый ssh.

Во, нашел:

https://en.m.wikipedia.org/wiki/Files_transferred_over_shell_protocol

legolegs ★★★★★ ()
Последнее исправление: legolegs (всего исправлений: 1 )
Ответ на: комментарий от legolegs

А я уже изобрел сам. Инотифи ловит сисколы по поводу обновления файлов, а потом через ссш туннель кладу в нужное место на девайсе. Завтра доделаю до красоты и выложу, ну как кому пригодится. Получилось очень удобно. Лаг, правда, около секунды, но для разработки не критично

pihter ★★★★★ ()

Вот, я наделал:

#!/bin/bash

LOCAL_DIR="/home/user/local_dir"
REMOTE_DIR="/path/dir"
EXCLUDE="\.(swp|swx)"
SSH_LOGIN="root"
SSH_HOST="XXX.XXX.XXX.XXX"

# Функция, которая будет выполнять необходимые действия
# В нашем случае копировать в другую директорию
make_action(){
  # Получаем директорию назначения
  DIR_TO_COPY_TO="${REMOTE_DIR}${1/${LOCAL_DIR}/${DST_DIR}}"

  echo -n "Отправка в ${DIR_TO_COPY_TO}${2}"

  # Создаем ее, если ее еще не существует
  `ssh $SSH_LOGIN@$SSH_HOST "mkdir -p $DIR_TO_COPY_TO"`

  # Копируем файл
  `cat $1$2 | ssh $SSH_LOGIN@$SSH_HOST "cat > ${DIR_TO_COPY_TO}${2}"`
  echo " готово"
}

IFS='
'
# Отслеживаем закрытие файлов после записи
# Получаем вывод в нужном нам формате
inotifywait -e close_write --format '%w %f' -m --exclude $EXCLUDE -r $LOCAL_DIR |\
(
while read
do
  # Получаем имя директории
  DIR=$(echo $REPLY | cut -f 1 -d' ')

  # Получаем имя файла
  FILE=$(echo $REPLY | cut -f 2 -d' ')

  # Передаем имена директории и файла в функцию
  if [ -f "${DIR}${FILE}" ]
  then
    make_action $DIR $FILE
  fi
done
)

сие поделие обладает очевидными недоделками:

1. надо заранее скопировать файлы на сервер. (можно, конечно, доработать скрипт, но 1 раз мне решилось проще руками)

2. не удаляет файл/каталог на сервере, если его удалить на локальной машине. (тоже можно легко доработать, просто мне не надо)

3. пароль к SSH-у. Легко докидывается утилитой sshpass кому вдруг надо

pihter ★★★★★ ()
Ответ на: комментарий от targitaj

а зачем? это мне щас искать исходники, пинать коллег по поводу тулчейна под этот MIPS, потом возиться со сборкой, потом пихать его в прошивку, потом перепрошивать... а так запустил скриптик и говнокодь спокойно, + скриптик вышел универсальный. Задача-то решена, о большем и не прошу.

// спасибо, кстати, legolegs-у, я вот не знал что через SSH пайп можно прокидывать вот так внаглую. А если можно, то и задача свелась к совсем простецкой.

pihter ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.