Суббота, 23.11.2024, 07:09
# FreeBSD ГлавнаяРегистрацияВход
Приветствую Вас Гость | RSS
Меню сайта
Категории раздела
Мои статьи [167]
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
 Каталог статей 
Главная » Статьи » Мои статьи

Как скопировать файлы с удаленного ПК, если есть только SSH?
Продолжаю серию статей про SSH, вопросы есть, а значит будут и ответы .
У нас есть сервер на котором есть SSH, ни кокого FTP там и в помине нет, а файлы надо как то по сети перекинуть. Собственно для этих целей воспользуемся SCP, подробнее о команде можно узнать из мануала, набрав:

man scp


или прочитав на сайте русскую версию мана.

(по материалам википедии)
SCP (от англ. secure copy) — протокол RCP копирования файлов, использующий в качестве транспорта не RSH, а SSH. В UNIX-подобных операционных системах существует одноимённая (scp) утилита удалённого копирования файлов (входит в состав openssh).

Стало быть раз уж SSH установлен, а если нет, смотрим статью SSH - настройки, то и команда scp в наличии.
Простейший пример использования SCP выглядит так:

scp file user_name@remote_server:~/


При этом локальный файл file будет скопирован на удаленный сервер и помещен в домашний каталог пользователя user_name. Вместо ~/ можно использовать любой другой путь или любую другую папку, в которой пользователь user_name имеет права на запись.

Чтобы скопировать файл с удаленного сервера на локальный компьютер, используется другой синтаксис SCP:

scp user_name@remote_server:~/file


При этом файл file, расположенный в домашнем каталоге пользователя user_name в удаленной системе, будет скопирован в локальную папку (в которой мы сейчас находимся).

Как и для команды cp (обычное копирование), команда scp поддерживает такие полезные ключи как:
-p для сохранения времени изменения файлов и -r для рекурсии.
Еще упомяну ключик -P port – использовать нестандартный порт (по умолчанию 22) – этот параметр следует использовать, если сервер ожидает соединения на нестандартном порту.

Утилита scp имеет одну особенность синтаксиса. Допустим,  в домашнем каталоге есть подкаталог с именем video и нужно скопировать его на удаленную систему. Необходимо, чтобы содержимое ~/video заменило содержимое каталога video на удаленном компьютере, если имена файлов или каталогов при копировании будут совпадать.

scp -pr ~/video user_name@remote_server:/dir/video


!!! В описании пути к каталогу на удаленном компьютере не хватает закрывающего слэша "/". С точки зрения SCP команда читается как "копировать содержимое каталога ~/video в каталог /dir/video на удаленном компьютере".
Как и в случае использования команды cp, файлы и каталоги, чьи имена совпадают с именами файлов и каталогов на сервере - перезаписываются, файлы с отличающимися именами на удаленной системе остаются нетронутыми.
Добавим в конец команды закрывающий слэш:

scp -pr ~/video user_name@remote_server:/dir/video/


 В этом случае scp поймет команду как "копировать каталог ~/video в каталог /dir/video." Вместо перезаписи содержимого удаленного каталога, каталог video на исходном компьютере будет просто скопирован в удаленный каталог.

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

Графические интерфейсы для SCP:

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

Midnight Commander
– одна из программ, обладающая функциями SCP-клиента (Меню > Правая панель/Левая панель > Shell-соединение).

Nautilus и Konqueror также поддерживают SCP. Для подключения к удаленной системе в адресной строке надо ввести ssh://user_name@remote_server:~/. При этом файлы могут копироваться, как если бы они были расположены локально.

В среде MS Windows есть отличное приложение WinSCP. Его интерфейс очень похож на Total Commander. Cуществует плагин для Total Commander, позволяющий выполнять SCP-подключения.

*****************************
В следующей статье про возможности SSH будут затронуты вопросы X forwarding(а)... (перенаправление Х-сов).

//H@wk!
 


P.S. на что еще нужно обратить внимание (подробнее в следующих статьях):

RCP - Удаленное копирование файлов (русский man)
rcp - копирование файлов между хостами (оба могут быть удаленными).
Имя файла записывается в виде:
[[user@]host:]file.
Если файл назначения является именем директории, то исходный(е) файл(ы)
копируются в нее. Относительные имена отсчитываются относительно домашней
директории соответствующего пользователя на соответствующем хосте.
Имена могут быть защищены (апострофами, кавычками или обратной косой)
от локальной интерпретации. Опции:

  • -p (сохраняет время модификации и, по возможности, права доступа)

  • -r (рекурсивно копировать всю директорию, файл назначения д.б. директорией)


RLOGIN

Позволяет входить в удаленную систему с виртуального терминала.

Синтаксис:
rlogin [-8E] [-e escape-символ] [-l имя-пользователя] удаленный-хост

Ключи:

  • -8 - 8-битный ввод (любите ли вы русский язык ;)
  • -E - не обрабатывать escape-символы
  • -e escape-символ - задает escape-символ вместо стандартного символа '~'
  • -l имя-пользователя - задает имя пользователя на удаленном хосте (по умолчанию совпадает с именем пользователя на локальном хосте)

escape-последовательности (распознаются только в начале строки, escape-символ можно задавать ключом -e):

  • ~. - разорвать соединение
RSH

Позволяет выполнять команду на удаленном хосте (514/TCP). Стандартный ввод rsh передается на стандартный ввод удаленной команды. Стандартный вывод удаленной команды передается на стандартный вывод rsh. stderr удаленной команды передается на stderr rsh по дополнительному каналу. Сигналы INT, HANG, TERM передаются удаленной команде.

Синтаксис:
rsh [-n] [-l имя-пользователя] удаленный-хост [команда]

Ключи:

  • -n - вместо стандартного ввода использовать /dev/null
  • -l имя-пользователя - задает имя пользователя на удаленном хосте (по умолчанию совпадает с именем пользователя на локальном хосте)
  • команда - команда для исполнения на удаленном хосте; если не указана, то производится rlogin (513/TCP)

На клиентской машине необходимо открыть порты 1023/TCP и 1022/TCP (1022 для stderr; это в надежде, что одновременно не может исполняться больше одного rsh ;). Файл /usr/bin/rsh имеет права rws и владельца root, чтобы иметь возможность открыть исходящий порт ниже 1023.

RDIST

Позволяет осуществить массовую автоматическую рассылку файлов с локального хоста на несколько сотен хостов с проверкой наличия места, рассылкой извещений о проблемах, исполнением завершающих процедур и т.п.. Сохраняет имя владельца, имя группы, права доступа и время модификации файла. Самый подходящий инструмент, если необходимо автоматизировать обновление пакетов на нескольких сотнях компьютеров. В качестве транспорта позволяет использовать rcmd(3) с помощью демона rdistd (не рассматриваю из-за проблем с безопасностью), rsh (не рассматриваю по тем же причинам) и ssh (не забудьте снять setuid). Канал передачи используется неэффективно в отличие от rsync

Опции:

  • -A число (минимальное число свободных inode перед копированием)
  • -a число (минимальное число свободных байт перед копированием)
  • -D (отладочная печать)
  • -d имя=значение (переопределение переменной из конфигурационного файла)
  • -F (не распараллеливать пересылку)
  • -f имя-конфигурационного-файла
  • -l опции-локального-журнала
  • -L опции-удаленного-журнала
  • -M число (максимальное число параллельных пересылок; по умолчанию - 4)
  • -m хост (ограничить пересылку указанным хостом; может быть несколько)
  • -n (печатать команды без реального исполнения)
  • -o опции-через-запятую
    • verify (только проверить, что файлы на всех хостах не устарели)
    • noexec (не пересылать файлы формата a.out; а ELF?)
    • younger (не пересылать файлы, которые моложе на удаленном хостк; обычно проверяется на несовпадение mtime и size)
    • compare (проводить полное бинарное сравнение файлов перед пересылкой вместо сравнения mtime и size)
    • follow (копировать файл, на который указывает символьная ссылка, а не саму ссылку)
    • ignlnks (не предупреждать о неразрешимых ссылках)
    • chkreadonly (предварительно проверять, что удаленный файл не лежит в файловой системе, открытой только на чтение)
    • quiet
    • remove (удалять на удаленном хосте файлы, которых нет на локальном хосте)
    • nochkowner (несовпадение владельца файла не является поводом для пересылки)
    • nochkgroup (то же для группы)
    • nochkmode (то же для прав доступа)
    • nodescend (не делать рекурсивный обход)
    • numchkgroup (использовать gid вместо имени группы)
    • numchkowner (использовать uid вместо имени владельца)
    • savetargets (делать backup переименовав файл в файл.OLD)
    • sparse (эффективно обрабатывать файлы с дырками)
  • -p путь-rdistd
  • -P /usr/local/bin/ssh (использовать в качестве транспорта ssh; выполняется команда: ssh хост -l удаленное-имя-пользователя rdistd -S)
  • -t секунд (timeout)
  • [имя ...] (имя файла или метки конфигурационного файла; по умолчанию - все файлы)

Опции журнализации.

Формат конфигурационного файла.

RSYNC Синхронизация файлов на удаленных хостах.

Аналогично rcp позволяет копировать файлы между хостами, но ускоряет процесс т.к. передает только измененные части (хитрый алгоритм на основе сравнения контрольных сумм). Позволяет копировать ссылки (links), специальные устройства (device), владельца и группу файла, права доступа. Позволяет использовать в качестве транспорта как rsh, так и ssh. Включает сервер rsyncd (доступ анонимный или с аутентификацией), порт 873/TCP. Я сервер не использую (не люблю, когда пароли лежат в открытом виде) и потому не описываю. Имя файла записывается в виде: [[user@]host:]file. Если файл назначения является именем директории, то исходные файлы копируются в нее. Если имя исходной директории завершается обычной косой чертой, то копируется содержимое директории, а не сама директория (почувствуйте разницу ;). Относительные имена отсчитываются относительно домашней директории соответствующего пользователя на соответствующем хосте. Если в качестве параметров указано только имя удаленного файла/директории, то выдается листинг. Нельзя копировать с одного удаленного хоста на другой. rsync должен быть установлен на обоих концах. Опции:

  • опции диалога:
    • -v (увеличить болтливость: один раз - имена передаваемых файлов; два раза - имена пропускаемых файлов; три раза - отладочная печать)
    • -q (совсем тихо)
    • --version
    • --progress (только в сочетании с -v)
    • --stats (статистика эффективности алгоритма)
    • --help
    • -n (не делать реальной пересылки, только отчет о предполагаемых действиях)
  • какие файлы включать в список проверки перед пересылкой
    • -r (рекурсивное копирование)
    • -x (не пересекать границы файловой системы при рекурсии)
    • --exclude=шаблон
    • --cvs-exclude (стандартный набор исключений, используемый cvs: *~, *.bak, *.o, core и т.д., включая содержимое файлов .cvsignore)
    • --exclude-from=имя-файла
    • --include=шаблон
    • --include-from=имя-файла
  • правила проверки на совпадение файлов
    • -I (пересылать файл даже если длина и время модификации совпадает на обоих концах)
    • --size-only (определять необходимость пересылки только по совпадению размеров файла)
    • --modify-window=секунд (если разница времени модификации меньше указанного числа, то файлы считаются одинаковыми; по умолчанию - 0)
    • -c (на исходном конце считается контрольная сумма (MD4) файла, на приемном конце она сравниваются с контрольной суммой локальной копии; если суммы совпадают, то пересылка не происходит)
    • -u (не изменять, если приемный файл новее исходного)
    • --existing (изменять только существующие файлы)
    • -W (копировать файлы целиком, не задействуя алгоритм сравнения)
  • backup (сохранять старую версию изменяемого файла)
    • -b (делать backup, суффикс по умолчанию - '~')
    • --suffix=суффикс (суффикс для backup)
    • --backup-dir (backup в указанную директорию)
  • обработка ссылок
    • -l (сохранять символьные ссылки; пропускаются по умолчанию)
    • --copy-links (обрабатывать символьные ссылки как обычные файлы)
    • --copy-unsafe-links (копировать ссылки, указывающие вовне исходного дерева)
    • --safe-links (игнорировать ссылки, указывающие вовне приемного дерева, и абсолютные ссылки)
    • -H (воссоздавать жесткие ссылки на приемном конце; срабатывает только если оба (а больше?) файла входят в список пересылки)
  • сохранение атрибутов файла
    • -a (архивный режим: синоним -rlpogDt)
    • -p (сохранять права доступа)
    • -o (сохранять владельца файла; только для root)
    • --numeric-ids (вместо имени владельца и группы пересылается uid и gid)
    • -g (сохранять группу файла; получатель должен быть членом группы)
    • -D (сохранять устройство; только для root)
    • -t (сохранять время модификации; очень рекомендуется, если предполагается повторная пересылка)
  • правила удаления
    • --delete (удалять на приемной стороне файлы, не существующие на исходной стороне)
    • --delete-excluded (удалять, если "несуществование" вызвано действием шаблона исключения)
    • --delete-after (удалять после передачи, а не до)
    • --ignore-errors (удалять даже при ошибках ввода/вывода)
    • --max-delete=число (не удалять более указанного числа файлов)
    • --force (удалять непустые директории; действует также при замене директории обычным файлом с тем же именем)
  • -R (относительные имена: в действительности передает имя файла из командной строки целиком вместе с именем директории, а не только файловую часть имени; осторожнее с символьными ссылками!)
  • -S (эффективно обрабатывать файлы с дырками)
  • --block-size=размер (размер блока для сравнения контрольных сумм - 700)
  • -e ssh (транспортный уровень; можно через переменную окружения RSYNC_RSH)
  • --rsync-path=путь (путь к rsync на удаленном хосте)
  • --partial (сохранять частично переданные файлы)
  • --timeout=секунд (по умолчанию 0 - бесконечность)
  • --temp-dir=директория (где хранить файлы во время пересылки)
  • --compare-dest=директория
  • --compress (gzip, но используется информация о пересылаемых структурах, что при большом числе неизмененных файлов будет полезно)

Синтаксис шаблона (и не лениво людям придумывать свои правила описания шаблонов?):

  • если шаблон начинается с обычной косой черты, то он сопоставляется с началом имени файла, иначе с концом имени файла
  • если шаблон завершается косой чертой, то он сопоставляется только с директорий
  • метасимволы *, ? и [ действуют как в шаблонах shell
  • если в шаблоне имеются две ** подряд, то все метасимволы могут сопоставляться с косой чертой, иначе их действие останавливается косыми чертами
  • если шаблон содершит нефинальную косую черту, то он сопоставляется полному имени файла, иначе последнему компоненту; только учтите, что алгоритм работает рекурсивно

Переменные окружения:

  • RSYNC_RSH=ssh
  • CVSIGNORE=шаблон

Типичный пример использования:

  • rsync -e ssh -vacu user@host:dir/ .
  • rsync -e ssh -vacu --exclude '.*.swp' . user@host:dir/
Категория: Мои статьи | Добавил: Admin (06.04.2011)
Просмотров: 3476 | Комментарии: 5 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Copyright MyCorp © 2024Сделать бесплатный сайт с uCoz