Назад | Перейти на главную страницу

Безопасное копирование в стиле uucp

У меня часто бывает, что мне приходится делать много переходов к удаленному хосту только потому, что между моим клиентом и удаленным хостом нет прямой маршрутизации. Когда мне нужно скопировать файлы с удаленного хоста на два или более прыжка, я всегда должен:

client$ ssh host1
host1$ ssh host2
host2$ scp host3:/myfile .
host2$ exit
host1$ scp host2:myfile .
host1$ exit
client$ scp host1:myfile .

Когда еще использовался uucp, это было так же просто, как

uucp host1!host2!host3 /myfile .

Я знаю, что есть uucp over ssh, но, к сожалению, у меня нет необходимых прав на этих машинах для его настройки. Кроме того, я не уверен, что действительно хочу возиться с машинами клиентов.

Кто-нибудь знает способ выполнения этих задач без необходимости настраивать множество туннелей или развертывать новое программное обеспечение на удаленных хостах? Может быть, какой-то рекурсивный скрипт, который клонирует себя на все удаленные хосты, делает за меня тяжелую работу?

Предположим, что аутентификация происходит с открытыми ключами и что все хосты выполняют пересылку агента SSH.

Изменить: я не ищу способ автоматической пересылки моего интерактивного сеанса на хост следующего магазина. Мне нужно решение для копирования файлов в стиле bangpath с использованием scp через несколько переходов без необходимости устанавливать uucp на любой из этих машин. У меня нет (законных) прав или привилегий вносить постоянные изменения в ssh-config. Кроме того, я делюсь этим именем пользователя и хостами с множеством других людей. Я хочу взломать свой собственный сценарий, но я хотел знать, знает ли кто-нибудь что-то, что уже делает это. Минимально инвазивные изменения хостов в bangpath, простой вызов от клиента.

Изменить 2: чтобы получить представление о том, как это правильно было сделано в интерактивных сеансах, взгляните на Кластерная оболочка GXPC. По сути, это Python-скрипт, который распространяется на все удаленные хосты, которые имеют подключение и на которых установлен ваш ssh-ключ. Самое замечательное в этом то, что вы можете сказать: «Я могу связаться с HostC через HostB через HostA». Просто работает. я хочу иметь этот для scp.

ssh host1 ssh host2 ssh host3 cat /myfile > myfile ? :)

UPD. (2014-01-20): Недавно наткнулся на man dbclient где упоминается: «…

-B endhost: endport - режим, подобный Netcat, в котором Dropbear будет подключаться к заданному хосту, а затем создаст перенаправленное соединение с конечным хостом. Затем это будет представлено как стандартный ввод / вывод dbclient.

Dropbear также позволяет указывать несколько «прыжков», разделенных запятыми. В этом случае соединение будет установлено с первым хостом, затем будет выполнено перенаправленное TCP-соединение со вторым хостом и так далее. Хосты, кроме конечного пункта назначения, не увидят ничего, кроме зашифрованного потока SSH. Порт для хоста можно указать с помощью косой черты (например, matt @ martello / 44). Этот синтаксис также можно использовать с scp или rsync (указав dbclient как команду ssh / rsh). Файл может быть "переброшен" через несколько переходов SSH, например

         scp -S dbclient matt@martello,root@wrt,canyons:/tmp/dump .

Обратите внимание, что имена хостов разрешаются предыдущим переходом (так что «каньоны» будут разрешены хостом «wrt») в приведенном выше примере, так же, как и другие перенаправленные хосты -L TCP. Ключи хоста проверяются локально на основе заданного имени хоста.

Даже если вы специально упомянули, что это не то, что вы ищете, я буду настаивать на том, чтобы вы попробовали это, потому что настройка скрипта на каждом хосте на пути к месту назначения более сложна и требует много времени.

Если вы используете хост-ноутбук и хотите скопировать что-то на хост-сервер, но вы можете получить доступ к веб-серверу только через companygatweay.org, то все, что вам нужно сделать, это:

laptop$   ssh -L4444 companygateway.org:webserevr:22

Это откроет порт 4444 на вашем локальном компьютере напрямую через веб-сервер на порт 22.

копирование с помощью scp на веб-сервер будет выглядеть так:

laptop$    scp -P 4444 /some/files/here localhost:/to/some/files/on/webserver

для копирования с веб-сервера:

laptop$    scp -P 4444 localhost:/tmp/remote/files /home/localusername/downloads