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

Удалённое выполнение команд [SSH]

 , ,


1

1

Здравствуйте!
Есть необходимость скопировать архив по ssh с одного хоста на другой, посчитать md5 сначала на одном хосте, затем на другом и далее сравнить эти суммы на первом. Делаю bash скриптом так:

md1=`md5 -q ./*.7z`
echo $md1

ssh -t $user@$host 'dd of=/home/$user/$name < ./$name ; md2=`/usr/bin/md5sum  ./*7z`'
echo $md2
patebin: http://pastebin.com/uKji9xWX
Но хост2 не хочет отдавать в переменную md5 сумму. Пробовал сделать это по-разному, но никак не получается. Первый хост - freebsd, второй - linux.

Присвоение переменной происходит там, здесь её нет. Передавай сумму в файле.

Gotf ★★★ ()

'dd of=/home/$user/$name < ./$name; ... '

Это я не понял. Если ты пытался изобразить копирование с одного хоста на другой, то ...

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

Да, это логично. Но неужели нет способа как-то запомнить эту переменную на первой машине? К примеру, я получаю stdout со второй машины на первую, вот может как-то через stdout формировать переменную уже на первой? По-моему, что так костыль, что файл со второй перекидывать на первую :(

Grotesque ()
Ответ на: комментарий от sdio

А чего непонятного-то? Простое «перемещение» файла побайтово через dd =) Это можно сделать, наверно, правильнее через scp, но я не уверен, что через scp можно выполнять команды удалённо, поэтому я остановился на вот таком варианте :) И да, он действительно работает :)

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

Не понятно где здесь "между хостами", это на удаленном хосте выполнится, включая "< ./$name"

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

Пардон, я попытался ненамеренно ввести Вас в заблуждение. Конечно, я выполняю «без ковычек» и в отдельной ssh-сессии (например):

 dd of=/home/$user/$name < ./$name 
и только затем пытаюсь сделать финт ушами с md5sum.

Grotesque ()
md1=$(file.7z)
scp file.7z user@host:file.7z
md2=$(ssh user@host md5sum file.7z)

Только смысла в этом нет, scp нормально всё скопирует, контролировать дополнительно не надо.

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

Не получается, я пробовал 100500 разных вариаций. Сейчас попробую ещё раз :)

Grotesque ()
Ответ на: комментарий от Legioner

Да? Хмм, я просто не углублялся в документацию SCP поэтому не был уверен, что оно гарантированно доставит байт к байту :) Ну и плюс ко всему это лишь небольшой кусочек скрипта, на самом деле мне нужно ещё много всего выполнять удалённо и поэтому я решил всё делать в одной сессии, в том числе передавать файл, ну и заодно посчитать его сумму :)

Grotesque ()
Ответ на: комментарий от Legioner

Всё получилось! Всем неравнодушным большое спасибо! :) Извиняюсь, что пришлось потратить ваше время на такой, как оказалось, пустяковый вопрос.

Grotesque ()

Есть необходимость скопировать архив по ssh с одного хоста на другой, посчитать md5 сначала на одном хосте, затем на другом и далее сравнить эти суммы на первом. Делаю bash скриптом так:

а rsync сломалась, да?

Но хост2 не хочет отдавать в переменную md5 сумму.

ещё бы. Через какой атсрал переменная md2 поедет с одного хоста на другой?

Не. Тебе надо в два этапа:

1. передать файл

2. передать md5

Второй этап необходим для того, что-бы md5 можно было сравнивать(для сравнения они должны быть на одном и том же хосте).

Хмм, я просто не углублялся в документацию SCP поэтому не был уверен, что оно гарантированно доставит байт к байту

какую чушь только не придумают…

emulek ()
Ответ на: комментарий от Grotesque

Гарантированно scp доставить возможности не имеет просто потому, что уборщица может выдернуть сетевой кабель во время передачи файла. Поэтому сразу после вызова scp тебе надо проверить $?, чтобы он был равен 0. Но если scp вернулся без ошибок, то всё будет нормально (ну разве что удалённый жёсткий диск будет сбоить, но, наверное, это учитывать не стоит).

Legioner ★★★★★ ()
Последнее исправление: Legioner (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.