Докачка с scp. со вкусом openssh.


bliznezz аватар

bliznezz - Posted on 28 Июль 2010

в теме Докачка с scp. Способы решения проблемы отлично решили проблему на стороне клиента с помощью curl и поддержки curl-лом sftp/scp протокола.
Вот только я не смог научиться подать в качестве параметра curl ключ, дабы избежать интерактивности с вводом пароля или открытым текстом его давать в качестве другого параметра.

предлагаю вашему вниманию скриптик (true unixway) для докачки по ssh.

scpresume login@remote.org.ua -f /var/log/fastgrow/remote.log -t /tmp/localcopy.log
#!/bin/bash
 
if [[ $# -lt 5 ]]
then
    echo -e "No enouth arguments\nSyntax: $0 [login@]host -f remotefile -t localfile " >&2 ;
    exit 1 ;
fi ;
 
REMOTEHOST="$1"
shift
while getopts ":f:t:" option
do
    case $option in
     f)    REMOTEFILE="${OPTARG}";;
     t)    LOCALFILE="${OPTARG}";;
    esac
done
 
test -f "$LOCALFILE" && SKIP=$(stat --format %s  "$LOCALFILE") || (echo "No such file: $LOCALFILE" >&2 ; exit 2;)
 
ssh $REMOTEHOST -C "tail -c +$SKIP $REMOTEFILE" >> "${LOCALFILE}" 
 
if [[ $? -ne 0 ]]
then
    echo "some error with remote site" >&2 
    exit 3
fi;
#CURSIZE=`stat --format %s "$LOCALFILE"`
#echo "$SKIP bytes was skiped.  $(( CURSIZE  - SKIP  )) bytes of $CURSIZE to file "$LOCALFILE" was append."

расскоментарив последние две строчки - можем посмотреть сколько байт было передано, сколько пропущено. Работает достаточно быстро:
удаленный файл порядка 300 мб (быстрорастущий лог),
десятки килобайт перекидывает меньше чем за секунду,
а 3 мегабайта - за 6 сек (из которых наверное целую секунду было потрачено непосредственно на передачу данных по сети).

из плюсов - это конечно подхыватывание опций из ~/.ssh/config и любимая всеми авторизация по ключам. а также можно встроить custom-опции в строку с ssh.

0
Ваша оценка: Ничего

> Вот только я не смог научиться подать в качестве параметра curl ключ, дабы избежать интерактивности с вводом пароля или открытым текстом его давать в качестве другого параметра.

обычно это запрещено для большинства программ для пущей безопасности. но если это не критично:

http://ru.wikipedia.org/wiki/Expect

вы меня не так поняли. curl-лу можно дать логин-пароль прямо в виде опций.
curl -u login:password -C - sftp://host/var/log/squid/access.log -o access.log

меня же интересует авторизация по ключам.

верно. не внимателен.

пойдет в копилку, спасибо.

в качестве идеи развития: довести до синтаксиса scp

$ scpresume host:/remote local

и скачивать файл, даже если локального файла нет.
тогда можно будет совсем сделать что то типа alias scp=scpresume Ж:-)

чем rsync не угодил?

требуется установка и настройка rsync на стороне сервера. (у меня рутовых прав нет на основной куче серверов, которые администрирую)

ничего подобного
если не указывать для удаленного узла два двоеточия то автоматом ломится по ssh и работает без rsync сервера

$ rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/

Хотел сперва на хабру запостить, но чо-то мне кажется меня там не поймут.
им подавай curl, а т.к. большинство там в убунте, в убунте curl он без --libssh2 и начнется головойка.

Отправить комментарий

Google Friend Connect (leave a quick comment)
loading...
Содержание этого поля является приватным и не предназначено к показу.