09.10.2011

Използването Rsync и SSH


Keys, утвърждаване и Автоматизация

Този документ обхваща използване на Cron, SSH, и Rsync за архивиране на файлове в локална мрежа или Интернет.
Част от моята цел е да се гарантира, не се изисква намесата на потребителя, когато компютърът се рестартира (пароли, ключове или ключовите мениджъри).

Обичам понякога да направите резервно копие на някои сеч, поща, и информация за конфигурацията на домакините през мрежата и Интернет, и тук аз не съм намерил начин да го направя.
Ще имате нужда от тези пакети, които са инсталирани:
  • Rsync
  • OpenSSH
  • Cron (или vixie-Cron)


Моля, имайте предвид, че тези инструкции могат да бъдат специфични версии на Red Hat Linux 7.3, 9, и Fedora Core 3, но се надявам, те не ще бъде твърде трудно да се адаптират към почти всеки * никс тип OS.
Човекът страници за “SSH” и “Rsync” трябва да Ви бъдем полезни, ако ви се наложи да промените някои неща (използвайте “SSH човек” и “човек Rsync” команди).


Първо, ще дефинираме някои променливи.
В моето обяснение, аз ще се синхронизиране на файлове (копиране само нови или променени файлове) по един начин, и аз ще бъда в началото на този процес от страната-домакин, искам да копирате неща. С други думи, аз ще се синхронизиране на файлове от / дистанционно / директория / на
remotehost, като
remoteuser / / директория / на thishost, като thisuser.

Искам да се уверете, че “Rsync” над “SSH” работи на всички, преди да започна за автоматизиране на процеса, така че аз го тества за първи път
като thisuser:
$ rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/


и въведете
remoteuser @ remotehost парола, когато бъдете подканени. Аз трябва да уверете се, че remoteuser има права за четене / дистанционно / директория / на remotehost, и че
thisuser има права за писане / това / / реж.
на thishost. Също така, “Rsync” и “SSH” трябва да бъде в thisuser “път (използване” SSH “и” който Rsync “),” Rsync “трябва да бъде в
remoteuser “път, и” SSHD “трябва да се работи на
remotehost.


Конфигуриране
thishost


Ако това всички работи, или аз в крайна сметка тя работи, аз съм готов за следващата стъпка.
Аз трябва да генерира частен / публичен чифт ключове, за да позволи “SSH връзка без да пита за парола. Това може да звучи опасно, и то е, но е по-добре, отколкото съхраняване на потребителска парола (или ключ парола), тъй като на ясен
текст в сценария[0]. Също така мога да поставя ограничения върху това, където връзките, направени с този ключ, може да дойде, и какво могат да направят, когато е свързан. Както и да е, аз генерират ключ, аз ще се използва за thishost (като thisuser):

$ ssh-keygen -t rsa -b 2048 -f /home/thisuser/cron/thishost-rsync-key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):[press enter here]Enter same passphrase again:[press enter here]Your identification has been saved in /home/thisuser/cron/thishost-rsync-key.
Your public key has been saved in /home/thisuser/cron/thishost-rsync-key.pub.
The key fingerprint is:
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 thisuser@thishost


и сега имаме ключ, без парола в двата файла, споменати по-
горе[1]. Уверете се, че няма други неупълномощени потребители могат да четат частен ключ файл (без разширение “. Кръчма”).


Този ключ е безпредметно, докато ние поставяме публичната част в “authorized_keys
файла[2] на remotehost, и по-специално за remoteuser:
/home/remoteuser/.ssh/authorized_keys


Аз използвам SCP, за да получите файла на
remotehost:

$ scp /home/thisuser/cron/thishost-rsync-key.pub remoteuser@remotehost:/home/remoteuser/


и тогава мога да подготвя нещата за
remotehost.


Конфигуриране
remotehost


“SSH” над към
remotehost:

$ ssh remoteuser@remotehost
remoteuser@remotehost’s password:[type correct password here]
$ echo I am now $USER at $HOSTNAME
I am now remoteuser at remotehost


да се направят някои работи.


Аз трябва да се уверете, че имам директория и файлове, които трябва да разрешат връзки с този
ключ[3]:
$ if[! -d.ssh]; then mkdir.ssh ; chmod 700.ssh ; fi
$ mv thishost-rsync-key.pub.ssh/
$ cd.ssh/
$ if[! -f authorized_keys]; then touch authorized_keys ; chmod 600 authorized_keys ; fi
$ cat thishost-rsync-key.pub >> authorized_keys


Сега ключът може да се използва за направата на връзки към този хост, но тези връзки могат да бъдат от всяка точка, (че SSH демона
на
remotehost позволява връзки от) и те могат да направят нищо (
че
remoteuser да направите), и аз не искам, че.
Аз редактирате файла “authorized_keys” (VI) и да променят линията с информация “thishost Rsync-key.pub” върху него. Аз само ще се добавят няколко неща в предната част на това, което вече е там, промяна на линията от
това:

ssh-dss AAAAB3NzaC1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap+fG8wjlaY/9t4u
A+2qx9JNorgdrWKhHSKHokFFlWRj+qk3q+lGHS+hsXuvta44W0yD0y0sW62wrEVegz+JVmntxeYc0nDz
5tVGfZe6ydlgomzj1bhfdpYe+BAwop8L+EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP
5IaCuYBhuTKQGa+oyH3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh
4oyX/aXEf8+HZBrO5vQjDBCfTFQA+35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55
Kk2rAAABAE/bA402VuCsOLg9YS0NKxugT+o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK
1/ZIvtl92DLlMhci5c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/+m6ZOLHN28mV
5KLUl7FTL2KZ583KrcWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ+QtEa0V2IwUDWS097p3SlLvozw
46+ucWxwTJttCHLzUmNN7w1cIv0w/OHh5IGh+wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp+NIKr
Y+aJz7myu4Unn9de4cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r+xrg5pZ5
GjfBCRvHNo2DF4YW9MKdUQiv+ILMY8OISduTeu32nyA7dwx7z5M8b+DtasRAa1U03EfpvRQps6ovu79m
bt1OE8LS9ql8trx8qyIpYmJxmzIdBQ+kzkY+9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn
75Cfzhv65hJkCjbiF7FZxosCRIuYbhEEKu2Z9Dgh+ZbsZ+9FETZVzKBs4fySA6dIw6zmGINd+KY6umMW
yJNej2Sia70fu3XLHj2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost


за това[
4]:

from=”10.1.1.1″,command=”/home/remoteuser/cron/validate-rsync” ssh-dss AAAAB3Nza
C1kc3MAAAEBAKYJenaYvMG3nHwWxKwlWLjHb77CT2hXwmC8Ap+fG8wjlaY/9t4uA+2qx9JNorgdrWKhH
SKHokFFlWRj+qk3q+lGHS+hsXuvta44W0yD0y0sW62wrEVegz+JVmntxeYc0nDz5tVGfZe6ydlgomzj1
bhfdpYe+BAwop8L+EMqKLS4iSacNjoPlHsmqHMnbibn3tBqJEq2QJjEPaiYj1iP5IaCuYBhuTKQGa+oy
H3mXEif5CKdsIKBj46B0tCy0/GC7oWcUN92QdLrUyTeRJZsTWsxKpRbMliD2pBh4oyX/aXEf8+HZBrO5
vQjDBCfTFQA+35Xrd3eTVEjkGkncI0SAeUAAAAVAMZSASmQ9Pi38mdm6oiVXD55Kk2rAAABAE/bA402V
uCsOLg9YS0NKxugT+o4UuIjyl6b2/cMmBVWO39lWAjcsKK/zEdJbrOdt/sKsxIK1/ZIvtl92DLlMhci5
c4tBjCODey4yjLhApjWgvX9D5OPp89qhah4zu509uNX7uH58Zw/+m6ZOLHN28mV5KLUl7FTL2KZ583Kr
cWkUA0Id4ptUa9CAkcqn/gWkHMptgVwaZKlqZ+QtEa0V2IwUDWS097p3SlLvozw46+ucWxwTJttCHLzU
mNN7w1cIv0w/OHh5IGh+wWjV9pbO0VT3/r2jxkzqksKOYAb5CYzSNRyEwp+NIKrY+aJz7myu4Unn9de4
cYsuXoAB6FQ5I8AAAEBAJSmDndXJCm7G66qdu3ElsLT0Jlz/es9F27r+xrg5pZ5GjfBCRvHNo2DF4YW9
MKdUQiv+ILMY8OISduTeu32nyA7dwx7z5M8b+DtasRAa1U03EfpvRQps6ovu79mbt1OE8LS9ql8trx8q
yIpYmJxmzIdBQ+kzkY+9ZlaXsaU0Ssuda7xPrX4405CbnKcpvM6q6okMP86Ejjn75Cfzhv65hJkCjbiF
7FZxosCRIuYbhEEKu2Z9Dgh+ZbsZ+9FETZVzKBs4fySA6dIw6zmGINd+KY6umMWyJNej2Sia70fu3XLH
j2yBgN5cy8arlZ80q1Mcy763RjYGkR/FkLJ611HWIA= thisuser@thishost


където “10.1.1.1″ е IP (версия 4[
5]) адрес на thishost “/ Начало / remoteuser / Cron / валидира Rsync” (която е само една от няколко възможности[6], включително и персонализиране[7]за повишаване на сигурността) е скрипт, който изглежда нещо като това:

#!/bin/sh

case “$SSH_ORIGINAL_COMMAND” in
*\&*)
echo “Rejected”
;;
*\(*)
echo “Rejected”
;;
*\{*)
echo “Rejected”
;;
*\;*)
echo “Rejected”
;;
*\<*)
echo “Rejected”
;;
*\`*)
echo “Rejected”
;;
*\|*)
echo “Rejected”
;;
rsync\ –server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo “Rejected”
;;
esac


Ако
thishost има променлива за адрес, или акции адрес (чрез NAT или нещо подобно) с домакините, нямате доверие, да пропусне “=” 10.1.1.1 “,” част на линията (включително запетая), но оставете “команда” част. По този начин, само “Rsync” ще бъде възможно от връзките, които използват този ключ. Уверете се, че “валидира Rsync” скрипт да е изпълним от remoteuser на remotehost и го тестваме.

ВНИМАНИЕ: Частният ключ, макар че сега донякъде ограничен в това, което той може да направи (и се надяваме, където може да се направи от), позволява на владелеца да копирате файл от remotehost,
че remoteuser има достъп до.
Това е опасно, и аз трябва да вземат всички необходими предпазни мерки, които считат за необходими за поддържане на сигурността и тайната на този ключ. Някои възможности ще бъде гарантирането на правилното файла разрешения са назначени, да обмисли възможността за използване ключова демон кеширане и ако наистина имам нужда този процес автоматизирани стихове риск.
Също така имайте предвид:
Друг детайл сигурност е да се помисли SSH демон конфигурация на
remotehost. Този пример се фокусира върху потребител (remoteuser), който не е корен. Аз не препоръчваме да използвате корен като отдалечения потребител, защото корен има достъп до всеки файл на remotehost. Тази способност сам по себе си е много опасно, и наказанията за грешка или неправилна конфигурация може да бъде далеч по-стръмен, отколкото тези за “нормални” потребител. Ако не използвате корен като отдалечени потребител (някога) и да направите решения за сигурност за remotehost, аз препоръчвам:
PermitRootLogin no


или:

PermitRootLogin forced-commands-only


бъдат включени в “/ и т.н. / SSH / sshd_config” файл на
remotehost. Това са глобални настройки, не само свързани с тази връзка, така че бъдете сигурни, че не се нуждаят от възможност за тези опции за конфигуриране забраняват[8].


AllowUsers “,” AllowGroups “,” DenyUsers “, както и ключови думи” DenyGroups “могат да бъдат използвани за ограничаване на SSH достъп до определени потребители и групи.
Те са документирани в човека страница за “sshd_config”, но аз ще спомена, че всички те могат да използват “*” и “?” като заместващи символи, за да се даде възможност и да откаже достъп на потребители и групи, които съответстват на модели. “AllowUsers” и “DenyUsers” може също така да ограничи домакин, когато моделът е в USER @ HOST форма.

Отстраняване на неизправности


Сега, че имам ключ, без парола в място и конфигурирани, аз трябва да го тествам преди да я сложите в Cron работа (която има свой ​​собствен малък набор от багажа).
Да излезете от сесията на SSH,
за да remotehost
и се опитват[ 9]:

$ rsync -avvvz -e “ssh -i /home/thisuser/cron/thishost-rsync-key” remoteuser@remotehost:/remote/dir /this/dir/


Ако това не работи, аз ще се “команда” ограничение върху ключа и опитайте отново.
Ако го пита за парола, аз ще провери разрешенията на файла с личен ключ (на
thishost, следва да е 600), на “authorized_keys” и (по remotehost, следва да е 600), на “~ /. SSH / директория (и на двата хоста, трябва да се 700) и на домашна директория (‘~/’) себе си (и на двата хоста, не трябва да се записваеми от всеки, но на потребителя). Ако някои загадъчен “Rsync” протокол грешка, която се споменава “валидира-Rsync скрипт, аз ще се уверете, че разрешенията за” Потвърди-Rsync” (на remotehost, може да бъде 755, ако всеки remotehost потребител е надежден) позволяват remoteuser да четат и изпълняват нея.


Ако нещата все още не работят, някои полезна информация може да се намери в лог файлове.
Лог файлове, които обикновено се
намират в / Var /
Дневник / директория на повечето Linux домакините
и в / Var / Дневник
/ сигурен лог файла на Red Hat-Иш домакините Linux.
Най-полезният лог файловете в този случай ще бъдат намерени на
remotehost, но Localhost, могат да дадат някакво информация за страна на клиента
в своите дневници[10]. Ако не можете да стигнете до трупите, или са само търпение, можете да кажете изпълним “SSH”, за да се дадат някои сеч с командите на “многословно”: “V”, “ВВ”, “ВВВ “. В по-многословно продукция. Един от тях е в командата по-горе, но този по-долу трябва да предостави много по-
висока мощност:
$ rsync -avvvz -e “ssh -i /home/thisuser/cron/thishost-rsync-key” remoteuser@remotehost:/remote/dir /this/dir/


Надяваме се, че той винаги ще работи само безупречно, така никога не съм трябва да се разшири информация за отстраняване на неизправности,
изброени тук[11].


Настройка Cron Job


Последната стъпка е Cron скрипт.
Аз използвам нещо подобно:

#!/bin/sh

RSYNC=/usr/bin/rsync
SSH=/usr/bin/ssh
KEY=/home/thisuser/cron/thishost-rsync-key
RUSER=remoteuser
RHOST=remotehost
RPATH=/remote/dir
LPATH=/this/dir/

$RSYNC -az -e “$SSH -i $KEY” $RUSER@$RHOST:$RPATH $LPATH


защото е лесно да се модифицира на бита и парчета от командния ред за различни хостове и пътеки.
Аз обикновено го наричат ​​нещо като “Rsync-remotehost архивиране”, ако той съдържа бекъп. Аз изпитвам сценария, само в случай, че внимателно добавя грешка някъде.


Когато получа скрипта работи успешно, аз използвам “кронтаб-е”, за да вмъкнете ред за тази нова работа Cron:
0 5 * * * /home/thisuser/cron/rsync-remotehost-backups


за ежедневно 5 часа сутринта синхронизация, или:

0 5 * * 5 /home/thisuser/cron/rsync-remotehost-backups


за седмично (5 часа сутринта в петък).
Месечни и годишни от тях са редки за мен, така че гледам за “човек кронтаб”
или
тук
за съвети за тези.


Добре!
Освен за ежедневието “крак с лепенки” нещо, коварното “скрити недостатъци конфигурация” част и незабравим “пълен отказ на човешката логика”, набор от проблеми, моята работа тук е свършена. Наслаждавайте се!
Забележки:
[0]Причината за избора на SSH ключ, без парола, над опции като
SSH-агент
или
ключодържател, е, че автоматизиран процес ще оцелее след рестартиране на приемащата машина и изпълнение на следващото планирано време, без каквато и да е намеса от моя страна (не всички машини, така автоматизирани винаги са достъпни). Ако не разполагате с тези изисквания, тези други опции, може да дава назаем изпълнение повече сигурност.
[1]Ако remotehost само SSH1 инсталиран, може да се наложи да използвате друг ключов тип. Вместо на “RSA” ще трябва да използват “rsa1″. Можете да използвате “DSA” вместо на “RSA”, но все пак ще бъде полезно само за връзка SSH2 (и дължина на ключа може да е проблем, както е

отбелязано
тук – благодаря
ти @ avenjamin). SSH2 връзки са по-сигурни от SSH1 връзки, но ще трябва да търсят другаде за подробности относно това (“мъж SSH-Keygen” и
Google). Също така, на ключови места може да бъде направено с командата (SSH-Keygen-б 2048-е keyfile-т RSA-N “) за автоматизиране на” ключова част парола “, или (SSH-Keygen-б 2048-е keyfile -р-т RSA-N “), за да се елиминират всички изход от командата.
[2]Някои конфигурации използват файла “authorized_keys2″ вместо “authorized_keys”. Потърсете “AuthorizedKeysFile” в “/ и т.н. / SSH / sshd_config.
[3]Ако използвате черупка, различни от “Баш” (или други съвместими борн обвивка), като “CSH” или “tcsh”, изброени команди не могат да работят. Преди да ги изпълнява, започнете “Bash” (или “ш”, или “KSH”, или “zsh”) черупка с “Bash” (или “ш”, или “KSH”, или “zsh”) команда. След завършване на команди, вие ще трябва да излезете от “Баш” черупка, а след това да излезете от черупката вашия хост
хайвера обикновено.
[4]Не забравяйте да не въвежда никакви нови редове в “authorized_keys” файл. Ключова информация, и добавя команди, свързани с този ключ, всички трябва да бъдат на една линия. Ключът генерирате (безсмислен неща в линията на ключа) ще бъде различен от този тук.
[5]Виждал съм един хост пренебрегват факта, правилно представени на IPv4 адрес, и вместо да видите входяща връзка, като IPv6-Иш вид на адреса (“: FFF: 10.1.1.1 “). Намерих адреса в “Var / / дневник / съобщения” на Fedora Core 3 Linux домакин, и тя не позволява връзки от този хост с IPv6-Иш версия във файла “authorized_keys”.
[6]Друг вариант за валидиране (и повече) е Perl скрипт намира тук:

http://www.inwap.com/mybin/miscunix/?rrsync
, макар че той е по-сложно. Версия на този скрипт на Perl е пакет с Rsync източник тук
:
http://www.samba.org/ftp/unpacked/rsync/support/rrsync (с подобрения).
[7]По времето, когато тече “валидира Rsync” скрипт, SSH връзка е направено с ключ за SSH, свързани с тази команда във файла “authorized_keys”. Този пример скрипт основно се опитва да се върне, “Отхвърлените” за нищо друго освен една команда, която започва с “Rsync – сървър”, което е какво Rsync през SSH се на другия край на връзката. Открих това, като пуснете “PS auxw | Впиши Rsync” на отдалечения край на връзката след инициализиране дълго Rsync работа, но Rsync Pro можете да добавите ‘-V-V-н “на вашите опции за командния ред за Rsync и тя ще покаже команда, той ще използва в края на сървъра, така че използвайте, че за да направите вашия скрипт команда по-конкретни, ако желаете. Първите шест “Отхвърлените” линии се опитваме да elimate черупка символи, които ще позволяват на дадено лице да изпълнява повече от една команда в рамките на една сесия (например, кратко Rsync и някои палав команда не искате да се работи дистанционно).
[8]“PermitRootLogin не” прави това, което се казва: корен потребител не е позволено да влезете чрез SSH. “PermitRootLogin принуден команди” изисква само, че всички връзки, посредством SSH като корен, трябва да се използва публичен ключ за удостоверяване (с ключ като “thishost-Rsync-key.pub”) и команда да бъдат свързани с този клавиш (като “Потвърди Rsync”). За повече обяснения, използвайте команда “човек sshd_config”. Ако използвате Ubuntu, моля уверете се, че е инсталиран пакета OpenSSH сървър “(не се инсталира по подразбиране).
[9]Всички видове на SSH ключове за команда линия могат да бъдат включени (цитирани) в рамките на Rsync ключа ‘-д “командния ред, както и нестандартни сървърни връзки порт SSH (например:”-P 2222 “, ако SSH слуша на порт 2222), в допълнение с частен ключ (“аз identity_file”) превключвател. (Per Funke предложи това и препратки

http://mike-hostetler.com/blog/2007/12/rsync-non-standard-ssh-port).

[10]Можете да разберете какво лог файл SSH ще бъде писмено, като се потърси в два файла: “/ и т.н. / SSH / sshd_config” и “/ и т.н. / syslog.conf”. “Sshd_config” съдържа параметър “SyslogFacility”, който по подразбиране е настроен на “AUTH”, но Red Hat обикновено тя определя “AUTHPRIV”. Който го е, не забравяйте, настройката и да го търсим “syslog.conf” файл. Обикновено ще намерите линия с “authpriv.*”, последван от някои раздели и след това лог файла, който търсите. Не обръщай внимание на линии с “authpriv.none в тях, тъй като те са probaby като в много видове съобщения, но да недопускане на тези от” authpriv
Syslog съоръжение.
[11]Не е вероятно.

Предоставя се разрешение за копиране, разпространение и / или модификация на този документ при условията Лиценза за свободна документация на GNU, версия 1.2 или някоя следваща версия, издадена от Фондацията за свободен софтуер; без непроменими раздели, без текст на предната подвързия и без задна покритие на текстове.
Копие на лиценза трябва да бъде на
разположение тук
и
тук
.
текущото копие на този документ трябва да бъде
на разположение
тук.

Comments are closed.