LINUX.ORG.RU

Запуск/останов приложения синхронно с ssh клиентом


0

1

Доброго времени суток.

Возможен ли сабж? Т.е. сначала запустить ssh клиента с пробросом порта, после успешного подключения - прикладное ПО, после завершения ППО - закрыть ssh сессию.

Решено

  • вариант 1, универсальный. Но теоретически могут остаться висящие сессии с пробросом порта, что не есть гуд.
  • вариант 2, специфичен для rsync и работает только с ключами, но не паролями
  • вариант 3. Если не важно на каком хосте запускать ППО, то хватит обычного ssh -R [...] <хост> <запуск ППО>, цепочку промежуточных хостов можно указать средствами ssh, см. вариант 2
★★★★★

возможно.
Для этого я придумал конвейеры

zolden ★★★★★ ()

Возможен ли сабж? Т.е. сначала запустить ssh клиента с пробросом порта, после успешного подключения - прикладное ПО, после завершения ППО - закрыть ssh сессию.

ssh command

работает как-то иначе?

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

Я другое имел в виду - запуск ПО на той же самой машине, с которой запущен ssh клиент

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

Хорошая шутка, но не вижу как здесь можно использовать конвеер. Особенно для закрытия ssh сессии после завершения ППО

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

Я другое имел в виду - запуск ПО на той же самой машине, с которой запущен ssh клиент

зачем же тебе нужен ssh?

и да

tar -cf - | ssh host tar -xf -

тебе это нужно? Первый tar у тебя как раз выполняется именно так, как ты описал. Если «не то», расскажи что.

drBatty ★★ ()

systemd такое умеет. по systemctl stop name киляет все запущенные приложением процессы. man systemd.service, man systemd.exec

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

Нет. Мне нужен открытый порт для rsync'а

Есть удалённый сайт. К его внутренним сетям доступ только через dmz ( есть хост dmz-host1 ). И есть хост server1 на который нужно синхронизировать каталог с фалами.

ssh -L 10022:server1:22 dmz-host

затем запускаю скрипт с rsync'ом

rsync -avz -e "ssh -p 10022" /local_dir user@localhost:/remote_dir -exclude /local_dir/exclude
router ★★★★★ ()
Ответ на: комментарий от AGUtilities

systemd такое умеет.

facepalm

скоро начнутся треды «Ура! Наконец-то с выходом systemd можно варить кофе!». Что делать, школоло про emacs не в курсе.

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

не занимайся ерундой. rsync умеет ssh из коробки. Причём со всеми наворотами. Вот первый попавшийся пример из мана, прямо для тебя

export RSYNC_CONNECT_PROG='ssh proxyhost nc %H 873'

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

Вот я дурак. Пойду остальную часть man rsync читать

Спасибо!

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

RSYNC_CONNECT_PROG похоже не работает одновременно с параметром -e. Зато с аутентификацией по ключам получилось сделать так:

rsync -avz -e "ssh -A dmz-host1 ssh -A server1" /local_dir :/remote_dir -exclude /local_dir/exclude

Все ключи должны быть на машине, с которой запускается скрипт. И желательно чтобы скрипты для dmz-host1 и server1 были разными ( хотя это вопрос безопасности и не относится к сабжу непосредственно )

Аутентификация по паролям к сожалению работать не будет.

Подсказку нашёл тут: http://sshmenu.sourceforge.net/articles/transparent-mulithop.html

Тут сказано, почему не получится работать с паролями: http://lists.samba.org/archive/rsync/2005-October/013787.html . Моего английского кунг-фу не хватило чтобы распарсить первый абзац, но смысл вроде уловил.

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 2)
Ответ на: комментарий от zolden

Сначала хотел написать что это работать не будет, потом понял что я чего-то не знаю. Полез читать man ssh и увидел ключ -f для перевода ssh в background. Отлично работает, т.ч. с авторизацией по паролям:

ssh -f -L 127.0.0.1:10022:server1:22 dmz-host1 'watch -n5 date'  && rsync -avz -e "ssh -p 10022 localhost"  /local_dir :/remote_dir -exclude /local_dir/exclude ; fuser -kn tcp 10022

Если нужно больше промежуточных хостов с парольной аутентификацией, то нужно использовать параметры -A и -t

ssh -A -t chainhost1 ssh -A -t chainhost2 ... ssh -A -t chainhostN

router ★★★★★ ()
Последнее исправление: router (всего исправлений: 1)
Ответ на: комментарий от drBatty

ssh command

работает как-то иначе?

З.Ы. похоже я утром тупил. Никто не мешает делать проброс в другую сторону ( -R ) и запустить rsync на другой стороне. Тогда да, достаточно запуска ssh

router ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.