Первая вещь иметь в виду состоит в том, что туннели имеют определенную конечную точку. Та конечная точка не должна быть клиентом или сервером, но данные только шифруются, в то время как это между клиентом и сервером.
Если Вы хотите, чтобы соединение на сервере туннелировало на example.com, Вы могли бы работать
ssh -R 4445:example.com:80 sam@example.com
Когда любой на сервере соединится с localhost:4445, пакет туннелирует зашифрованный Вашему клиенту. От Вашего клиента пакет переместится незашифрованный в пример com:80. SSH не выполняет анализа Вашего протокола подключения, пакеты просто входят в один конец и выходят другой.
Один туннель может только перейти к одной конечной точке. Если Вы захотите пойти где-то в другом месте (скажите, example.org), то необходимо будет закрыть соединение SSH и сделать новое с -R 4445:example.org:80
. Если бы Вы хотите соединиться и с example.com и с example.org, необходимо было бы создать два различных туннеля с различными локальными портами: -R 4445:example.com:80 -R 4446:example.com:80
.
(Очень хорошим) значением по умолчанию туннели могут только "прибыть из" одного места (localhost сервера для туннелей-R, localhost клиента для туннелей-L). Для туннелей-R, если Вы включаете GatewayPorts
в sshd_config файле сервера затем можно сказать этому слушать на IP-адресе сервера для любого, кто может соединиться с сервером:
ssh -R server:4445:example.com:80 ...
Затем любому, кто может достигнуть server:4445, не зашифровали бы их пакетное перемещение к серверу, сервер туннелирует, это зашифровало клиенту, затем клиент отправит незашифрованный в пример com:80.
https://stackoverflow.com/questions/4269798/use-gnu-find-to-show-only-the-leaf-directories
find . -type d -exec sh -c '(ls -p "{}"|grep />/dev/null)||echo "{}"' \;
В любом случае медленнее, чем
find . -type d -links 2
.
Попробуйте следующий однострочник:
find . -type d -execdir sh -c 'test -z "$(find "{}" -mindepth 1 -type d)" && echo $PWD/{}' ';'