Имеем такую ситуацию: две машины (Host и Remote) под FreeBsd 6.3 нуждаются в передаче файлов zip файлов между ними в 4,5 и в 6 часов ночи.Начинаем с организации пользователей. На каждой из машин организуем пользователя user в группе usergroup с паролем userpass. Так же он включен в wheels. В директории /usr/home/user на host прописываем файл .netrc c соотв. указаниями. На машине remote запускаем ftpd. На машине Host делаем командный файл go (с правами user 700) след. вида
#!/bin/sh
Prompt
# для контроля запуска
touch already
ftp remote < text.txtФайл text.txt содержит следуощее:
put /usr/home/user/1.zip
Оба файла имеют владельцем user с правами 700. Файл 1.zip имеет владельца user c правами 660.
Начинаем пробовать
1. При запуске ./go c консоли пользователем user все работает нормально, файл передается.
2. При запуске из сron ( в файл crontab внесена строка n m * * * user /usr/home/user/go) передачи не происходит хотя файл already создается.
Устав от нелепости происходящего ( раннее передача по Ftp похожими скриптами долго работала на ASP Linux) и подгоняемый сроками решил использовать ssh.Прочитав http://www.opennet.me/DOCS/use_ssh и http://www.crocodile.sumy.ua/articles/8
взялся за scp.
Запускаем sshd на машинах. Запускаем ssh-keygen от имени user ( ssh-ketgen –b 1024 –t dsa ) и изготовляем ключи my и my.pub. Файл my.pub копируется в файл authorized_keys владельцем которого является user с правами 700. Файл authorized_keys копируем на машину remote и размещаем в каталоге /usr/home/user/.ssh владелец которого user
с правами 700. ( благо ftp мы подняли ранее ).
На машине host создаем файл go1 который содержит в себе строку
scp /usr/home/user/1.zip user@remote:/usr/home/user/1.zip и пытаемся осуществить передачу. В место ожидаемого получаем password:... И в последующие разы тоже. То есть обещанного не получается. Обидно и стыдно ....Подскажите, желательно по обоим случаям, где искать косяк. Сроки прошли, терпение иссякает, помогите ребята. Я знаю что не откажете …
>[оверквотинг удален]
>700. Файл authorized_keys копируем на машину remote и размещаем в каталоге
>/usr/home/user/.ssh владелец которого user
>с правами 700. ( благо ftp мы подняли ранее ).
>На машине host создаем файл go1 который содержит в себе строку
>scp /usr/home/user/1.zip user@remote:/usr/home/user/1.zip и пытаемся осуществить передачу. В место ожидаемого получаем
>password:... И в последующие разы тоже. То есть обещанного не
>получается. Обидно и стыдно ....
>
>Подскажите, желательно по обоим случаям, где искать косяк. Сроки прошли, терпение иссякает,
>помогите ребята. Я знаю что не откажете …1. ssh-keygen -t rsa, а не dsa (ИМХО)
2. ssh-keygen + ssh-copy-id ИМХО лучше подходит для выполнения задач аутентификации по ключу, чем выполнение манипуляций руками.
3. Я бы проверил в sshd_config следующие строчки:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
>[оверквотинг удален]
>>700. Файл authorized_keys копируем на машину remote и размещаем в каталоге
>>/usr/home/user/.ssh владелец которого user
>>с правами 700. ( благо ftp мы подняли ранее ).
>>На машине host создаем файл go1 который содержит в себе строку
>>scp /usr/home/user/1.zip user@remote:/usr/home/user/1.zip и пытаемся осуществить передачу. В место ожидаемого получаем
>>password:... И в последующие разы тоже. То есть обещанного не
>>получается. Обидно и стыдно ....
>>
>>Подскажите, желательно по обоим случаям, где искать косяк. Сроки прошли, терпение иссякает,
>>помогите ребята. Я знаю что не откажете …Попробуй этот скрипт:
=====================================================================================
#!/bin/bash
$USER="user"
$HOME="/home/user"
FILE="1.zip"if [ ! -f $HOME/.ssh/id_rsa ]
then
ssh-keygen -t rsa
ficat $HOME/.ssh/id_rsa.pub | ssh $USER@backup_server 'sh -c "cat - >>~/.ssh/authorized_keys2"'
scp -r $HOME/$FILE $USER@router:$HOME
=====================================================================================
>[оверквотинг удален]
>
>if [ ! -f $HOME/.ssh/id_rsa ]
>then
>ssh-keygen -t rsa
>fi
>
>cat $HOME/.ssh/id_rsa.pub | ssh $USER@backup_server 'sh -c "cat - >>~/.ssh/authorized_keys2"'
>
>scp -r $HOME/$FILE $USER@router:$HOME
>=====================================================================================Спасибо за ответ.
Выполнено.
Результата нет.В текс скрипта внесены поправки:
Строка 1 У меня bash лежит /usr/local/bin/bash/
и первая строка поправлена на /usr/local/bin/bash/Строка 2 USER - backuper. Стока изменена на $USER="backuper"
Строка 3 $HOME="/home/user" Изменено на $HOME="/usr/home/user/backuper"
Строка 4 Изменено на $FILE="1.zip" исходя из послед. текста
Строка 11 @backup_server заменено на реальный IP
Строка 12 @router заменено на реальный IP, тот же что строчкой вышеИзменения вносильсь по 1 строчке и скрипт запускался.
Ошибки : стр. 2 backuper=backuper command not found
стр. 3 /home/backuper=/home/backuper command not found
стр. 5 =1.zip command not found
стр. 8 syntax error near unexpected token `then`
Результата нет, смысл скрипта не ясенПосоветуйте что-нибудь еще, пожалуйта
>[оверквотинг удален]
>command not found
> стр. 5 =1.zip
>command not found
> стр. 8
>syntax error near unexpected token `then`
>Результата нет, смысл скрипта не ясен
>
>Посоветуйте что-нибудь еще, пожалуйта
>
>Вам что религия не позволяет perl+ftp использовать или любите себя мучать?
>Посоветуйте что-нибудь еще, пожалуйта
>
>Запарился.... Поправил....
========================================================================
#!/usr/local/bin/bash
USER="backuper"
HOME="/usr/home/user/backuper"
FILE="/usr/home/user/1.zip"
SERVER="реальный IP"
if [ ! -f $HOME/.ssh/id_rsa ]
then
ssh-keygen -t rsa
ficat $HOME/.ssh/id_rsa.pub | ssh $USER@$SERVER 'sh -c "cat - >>~/.ssh/authorized_keys2"'
scp -r $HOME/$FILE $USER@$SERVER:$HOME
================================================================================
>[оверквотинг удален]
>>Подскажите, желательно по обоим случаям, где искать косяк. Сроки прошли, терпение иссякает,
>>помогите ребята. Я знаю что не откажете …
>
>1. ssh-keygen -t rsa, а не dsa (ИМХО)
>2. ssh-keygen + ssh-copy-id ИМХО лучше подходит для выполнения задач аутентификации по
>ключу, чем выполнение манипуляций руками.
>3. Я бы проверил в sshd_config следующие строчки:
>RSAAuthentication yes
>PubkeyAuthentication yes
>AuthorizedKeysFile .ssh/authorized_keysСпасибо за ответ
По пунктам1 выполнено. правда -dsa тоже никто не отключал
2 принято к сведению, использовано
3 Выполнено.результата нет. вернее такой-же как и был
Подскажи что-нибуть еще ... Пожалуйсиа :(
Посмотри может поможет. Это мой скрипт. делает тоже самое.
#!/bin/perluse Net::FTP
#SKript for FTP file transfer
#Assign hostname(ip),user and pass.
print;
my $hostname = "xxx.xxx.xxx.xxx";
my $user = 'ftp_user';
my $pass = 'ftp_pass';
my $file = $ARGV[0];
my $dest = '/ftp/dest';
#Connect and Login to FTP.
$ftp = Net::FTP->new($hostname) or die;
$ftp->login($user, $pass) or die;
$ftp->binary() or die;$ftp->put("$file", "$dest") or die;
$ftp->quit() or die;
>[оверквотинг удален]
>my $dest = '/ftp/dest';
>
>
>#Connect and Login to FTP.
>$ftp = Net::FTP->new($hostname) or die;
>$ftp->login($user, $pass) or die;
>$ftp->binary() or die;
>
>$ftp->put("$file", "$dest") or die;
>$ftp->quit() or die;Ой, как сложно-то всё!!!
У меня только один вопрос: А ВЫ ЧАСОМ КОГДА КЛЮЧ ГЕНЕРИЛИ ПАРОЛЬ НА НЕГО ЗАДАВАЛИ ИЛИ "ПРОСТО ЖАЛИ ENTER"? Если Вы задали непустой пароль то его у Вас ОБЯЗАТЕЛЬНО спросят, даже если есть авторизация по ключу.
>[оверквотинг удален]
>>$ftp->binary() or die;
>>
>>$ftp->put("$file", "$dest") or die;
>>$ftp->quit() or die;
>
>Ой, как сложно-то всё!!!
>У меня только один вопрос: А ВЫ ЧАСОМ КОГДА КЛЮЧ ГЕНЕРИЛИ ПАРОЛЬ
>НА НЕГО ЗАДАВАЛИ ИЛИ "ПРОСТО ЖАЛИ ENTER"? Если Вы задали непустой
>пароль то его у Вас ОБЯЗАТЕЛЬНО спросят, даже если есть авторизация
>по ключу.Это вы называете сложно?? Сложно это скрипт который вызывает этот для передачи фаилов.:)
>[оверквотинг удален]
>700. Файл authorized_keys копируем на машину remote и размещаем в каталоге
>/usr/home/user/.ssh владелец которого user
>с правами 700. ( благо ftp мы подняли ранее ).
>На машине host создаем файл go1 который содержит в себе строку
>scp /usr/home/user/1.zip user@remote:/usr/home/user/1.zip и пытаемся осуществить передачу. В место ожидаемого получаем
>password:... И в последующие разы тоже. То есть обещанного не
>получается. Обидно и стыдно ....
>
>Подскажите, желательно по обоим случаям, где искать косяк. Сроки прошли, терпение иссякает,
>помогите ребята. Я знаю что не откажете …user@host % ssh-keygen
На запрос Passphrase жмём Enter (оставляем пустой)user@host % scp my.pub user@remote:.
user@remote % cat my.pub > .ssh/authorized_keys (если его нет, или он пустой, или в нём старые и ненужные ключи)
user@host % cat ./go1
#!/bin/sh
/usr/bin/scp /usr/home/user/1.zip user@remote:/usr/home/user/1.zipuser@host % crontab -l
n m * * * /usr/home/user/go1
>[оверквотинг удален]
>user@host % scp my.pub user@remote:.
>
>user@remote % cat my.pub > .ssh/authorized_keys (если его нет, или он пустой, или в нём старые и ненужные ключи)
>
>user@host % cat ./go1
>#!/bin/sh
>/usr/bin/scp /usr/home/user/1.zip user@remote:/usr/home/user/1.zip
>
>user@host % crontab -l
>n m * * * /usr/home/user/go1Я думаю, что ошибка именно в том, что пароль не пустой.
А из крона разве будут доступны ssh ключи? Не для этой цели ssh-agent придуман?
>А из крона разве будут доступны ssh ключи? Не для этой цели
>ssh-agent придуман?Будут.
>>А из крона разве будут доступны ssh ключи? Не для этой цели
>>ssh-agent придуман?
>
>Будут.Если их указать явно.
>>>А из крона разве будут доступны ssh ключи? Не для этой цели
>>>ssh-agent придуман?
>>
>>Будут.
>
>Если их указать явно.Each user has their own crontab, and commands in any given crontab will be executed as the user who owns the crontab.
>>>>А из крона разве будут доступны ssh ключи? Не для этой цели
>>>>ssh-agent придуман?
>>>
>>>Будут.
>>
>>Если их указать явно.
>
>Each user has their own crontab, and commands in any given crontab
>will be executed as the user who owns the crontab.Так-то оно так, но лучше все-таки указывать ключ явно.
Это сугубо мое ИМХО.
>>>>А из крона разве будут доступны ssh ключи? Не для этой цели
>>>>ssh-agent придуман?
>>>
>>>Будут.
>>
>>Если их указать явно.
>
>Each user has their own crontab, and commands in any given crontab
>will be executed as the user who owns the crontab.Речь же идет о доступности пользовательских ключей для крон, а не команд. Насколько я понимаю, ключи пользователя крону не доступны. Для доступности и запуска программ от имени и с ключами юзера и используют ssh-agent. А иначе зачем ssh пароль у юзера спрашивает, если ключи доступны?
>[оверквотинг удален]
>>>>Будут.
>>>
>>>Если их указать явно.
>>
>>Each user has their own crontab, and commands in any given crontab
>>will be executed as the user who owns the crontab.
>
>Речь же идет о доступности пользовательских ключей для крон, а не команд.
>Насколько я понимаю, ключи пользователя крону не доступны. Для доступности и
>запуска программ от имени и с ключами юзера и используют ssh-agent.Что вам непонятно в приведённой цитате из мана?
>А иначе зачем ssh пароль у юзера спрашивает, если ключи доступны?
Об этом говорилось выше - скорее всего passphrase не пустой.
>Что вам непонятно в приведённой цитате из мана?Там про рабочее окружение не говорится.
>
>>А иначе зачем ssh пароль у юзера спрашивает, если ключи доступны?
>
>Об этом говорилось выше - скорее всего passphrase не пустой.Но он пустой, по утверждению автора топика. Если все, как вы говорите, то почему же не работает?
>>Что вам непонятно в приведённой цитате из мана?
>
>Там про рабочее окружение не говорится.А причём, в данном конкретном случае, рабочее окружение?
scp запускается кроном от имени пользователя user и соотв. от имени этого же пользователя ломится на remote. Уже там, на remote, проверяется ключ, так что на окружение локального сервера (host) нам совершенно наплевать.>>
>>>А иначе зачем ssh пароль у юзера спрашивает, если ключи доступны?
>>
>>Об этом говорилось выше - скорее всего passphrase не пустой.
>
>Но он пустой, по утверждению автора топика. Если все, как вы говорите,
>то почему же не работает?А хрен его знает. Это уж автор пусть разбирается. Всё уже разжевали до неприличия.
>[оверквотинг удален]
>>>
>>>>А иначе зачем ssh пароль у юзера спрашивает, если ключи доступны?
>>>
>>>Об этом говорилось выше - скорее всего passphrase не пустой.
>>
>>Но он пустой, по утверждению автора топика. Если все, как вы говорите,
>>то почему же не работает?
>
>А хрен его знает. Это уж автор пусть разбирается. Всё уже разжевали
>до неприличия.Плдскажите ГДЕ и ЧТО вы разжевали и до какого неприличия. Пока ничего кроме жеванных соплей нет.
Поясните, пожалуйста, в какой файл добавить какую строку и какое права дать на файл и кому. Запускаться все должно именно из крона (подскажите более удобный (подходящий)путь запуска программ). Пароль у пользователя user не пустой, пустая pasfrase . Все попытки переслать по SCP делались ВРУЧНУЮ.
По FTP неудачна пересылка про CRON.
Или запускать передачу файла из под рута ? И с пустым паролем ? К сожалению пока обсуждение более пожоже на меряние сами знаете чем, чем на желанее помочь.
Рабята, пожалуйста серьезнее...
Господа, обьясните, ЧТО вы разжевали и конкретно в каком месте ?
>[оверквотинг удален]
>более удобный (подходящий)путь запуска программ). Пароль у пользователя user не пустой,
>пустая pasfrase . Все попытки переслать по SCP делались ВРУЧНУЮ.
>По FTP неудачна пересылка про CRON.
>Или запускать передачу файла из под рута ? И с пустым паролем
>? К сожалению пока обсуждение более пожоже на меряние сами знаете
>чем, чем на желанее помочь.
>Рабята, пожалуйста серьезнее...
>
>
>Господа, обьясните, ЧТО вы разжевали и конкретно в каком месте ?Не поленюсь и снова спрошу готовый вариант на perl-е религия не позволяет исползовать?? Возми подгони под себя и живи спокойно.
>[оверквотинг удален]
>более удобный (подходящий)путь запуска программ). Пароль у пользователя user не пустой,
>пустая pasfrase . Все попытки переслать по SCP делались ВРУЧНУЮ.
>По FTP неудачна пересылка про CRON.
>Или запускать передачу файла из под рута ? И с пустым паролем
>? К сожалению пока обсуждение более пожоже на меряние сами знаете
>чем, чем на желанее помочь.
>Рабята, пожалуйста серьезнее...
>
>
>Господа, обьясните, ЧТО вы разжевали и конкретно в каком месте ?Что я сделал неверно, в каком месте ? FTP пересылка по данному агоритму продолжалась более 3 лет, никогда проблем НЕ БЫЛО. С SCP
>[оверквотинг удален]
>более удобный (подходящий)путь запуска программ). Пароль у пользователя user не пустой,
>пустая pasfrase . Все попытки переслать по SCP делались ВРУЧНУЮ.
>По FTP неудачна пересылка про CRON.
>Или запускать передачу файла из под рута ? И с пустым паролем
>? К сожалению пока обсуждение более пожоже на меряние сами знаете
>чем, чем на желанее помочь.
>Рабята, пожалуйста серьезнее...
>
>
>Господа, обьясните, ЧТО вы разжевали и конкретно в каком месте ?По FTP речь с моей стороны вообще не идёт.
user@host % ssh-keygen
На запрос Passphrase жмём Enter (оставляем пустой)user@host % scp my.pub user@remote:.
user@remote % cat my.pub > .ssh/authorized_keys (если его нет, или он пустой, или в нём старые и ненужные ключи)
user@host % cat ./go1
#!/bin/sh
/usr/bin/scp /usr/home/user/1.zip user@remote:/usr/home/user/1.zipuser@host % crontab -l
n m * * * /usr/home/user/go1Что в этом неясно?
>[оверквотинг удален]
>более удобный (подходящий)путь запуска программ). Пароль у пользователя user не пустой,
>пустая pasfrase . Все попытки переслать по SCP делались ВРУЧНУЮ.
>По FTP неудачна пересылка про CRON.
>Или запускать передачу файла из под рута ? И с пустым паролем
>? К сожалению пока обсуждение более пожоже на меряние сами знаете
>чем, чем на желанее помочь.
>Рабята, пожалуйста серьезнее...
>
>
>Господа, обьясните, ЧТО вы разжевали и конкретно в каком месте ?Что я сделал неверно, в каком месте ? FTP пересылка по данному агоритму продолжалась более 3 лет, никогда проблем НЕ БЫЛО. С SCP завазался впервые, рекомендации статей выполнены точно, но результат отрицательный. Всего-то надо чтоб тот кто В ТЕМЕ подсказал...
>[оверквотинг удален]
>>чем, чем на желанее помочь.
>>Рабята, пожалуйста серьезнее...
>>
>>
>>Господа, обьясните, ЧТО вы разжевали и конкретно в каком месте ?
>
>Что я сделал неверно, в каком месте ? FTP пересылка по данному
>агоритму продолжалась более 3 лет, никогда проблем НЕ БЫЛО. С SCP
>завазался впервые, рекомендации статей выполнены точно, но результат отрицательный. Всего-то надо
>чтоб тот кто В ТЕМЕ подсказал...Извините, написал предыдущее сообщение ДО того как прочитал Ваше. Сейчас попробую точно как Вы сказали в последний раз. Только одно, из под какого пользователя запускать ssh-keygen, из под рута или юзера ? В конечном счете все должно работать из под CRON.
>[оверквотинг удален]
>>
>>Что я сделал неверно, в каком месте ? FTP пересылка по данному
>>агоритму продолжалась более 3 лет, никогда проблем НЕ БЫЛО. С SCP
>>завазался впервые, рекомендации статей выполнены точно, но результат отрицательный. Всего-то надо
>>чтоб тот кто В ТЕМЕ подсказал...
>
>Извините, написал предыдущее сообщение ДО того как прочитал Ваше. Сейчас попробую точно
>как Вы сказали в последний раз. Только одно, из под какого
>пользователя запускать ssh-keygen, из под рута или юзера ? В конечном
>счете все должно работать из под CRON.В данном конкретном случае забудьте о существовании рута вообще. Всё выполняется только из-под пользователей.
Добавьте в scp явное указание файла с ключом:
-i identity_file
Selects the file from which the identity (private key) for RSA authentication is read. This option is directly passed to ssh(1).Также полезным будет -v или даже -vvv, выведет массу отладочной информации, которая может подсказать в чем проблема.
По поводу ftp стоит глянуть на пакет ncftp с его ncftpput и ncftpget