Это своего рода повышение уровня этого вопроса. Предположим, что я нахожусь на компьютере A и хочу отправить файлы на компьютер C У каждого из нас есть отдельный доступ к хосту B A и C не могут общаться напрямую, а B не может инициировать соединение ни с одним из них.

Есть ли способ, которым я мог бы передать большой файл в SSH и создать какой-то поток, который я мог бы затем сказать пользователю компьютера C для подключения? Файл больше, чем доступное пространство на B Мое текущее решение состоит в том, чтобы split большой файл, загружать каждый сегмент по очереди, и когда пользователь в C завершил загрузку одного чанка, я извлекаю его и загружаю следующий.

2 ответа2

1

Если я вас правильно понимаю, вы хотите отправить данные из А в С, но ни один компьютер не может подключиться к другому, но оба они могут подключиться к В. Б не может подключиться ни к кому.

Одним из решений является использование переадресации портов. C может пересылать данные с порта на B на порт SSH (порт 22):

ssh -R 1088:localhost:22

1088 произвольно, выберите порт, который еще не используется. По умолчанию этот порт доступен только на этом локальном компьютере, т. Е. К нему могут подключаться только процессы, работающие на B.

Теперь пользователь на A может напрямую подключиться к C:

ssh B "ssh -p 1088 localhost"

Или, например, эта команда отправит файл из A в C:

cat infile | ssh B "ssh -p 1088 localhost \"cat > outfile\""

В качестве альтернативы, A мог бы перенаправить свой порт, позволяя пользователю на C инициировать копирование.

Другое решение заключается в использовании именованных каналов. На B выполнить:

mkfifo named_pipe

Затем на A вы можете отправить данные в канал с помощью:

cat infile | ssh B "cat > named_pipe"

Эта команда будет зависать, пока кто-нибудь не откроет другой конец канала и не прочитает данные из него. Например, пользователь на C может сделать:

ssh B "cat named_pipe" > outfile

Это отправит файл из А через В в С.

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .