Передача через локальный сокет или именованный канал

Я читаю книгу, которая связана SSH. Я не могу выяснить то, что означает это предложение.

Клиенты SSH общаются с агентом через локальный сокет или именованный канал, имя файла которого хранится в переменной среды, таким образом, у всех клиентов (и всех других процессов) в рамках Вашей сессии входа в систему есть доступ к агенту.

"через локальный сокет или именованный канал", что это означает?

2
задан 5 December 2019 в 08:56

1 ответ

Давайте ответим на вопросы пары сначала:

  • Что такое именованный канал? Это - метод межпроцессного взаимодействия. Анонимные конвейеры создаются в программном обеспечении, обычно через pipe() syscall. Когда Вы делаете конвейер в оболочке как /bin/echo foo | grep 'foo' Вы просите окружать для выполнения этого pipe() назовите, сделайте два подпроцесса и сделайте те два subrocesses (в этом случае /bin/echo и grep ) говорите друг с другом. Конечно, потому что тот тип канала является анонимным, нет никакого названия его в файловой системе на диске (в виртуальной файловой системе ядра существует файл, но это - другая история). Именованные каналы иначе FIFO могут быть созданы с mkfifo команда или mkfifo(3)/mkfifoat(3) syscalls. Например, mkfifo /tmp/my_named_pipe.fifo. Таким образом вместо выполнения echo foo | grep 'foo' в том же терминале можно сделать echo foo > /tmp/my_named_pipe.fifo и имейте grep 'foo' /tmp/my_named_pipe.fifo в другом терминале

    Таким образом, основная идея имеет канал, должен иметь две конечных точки - один для записи и один для чтения. В случае именованного канала у Вас есть одна команда/процесс, пишущая в тот файл FIFO и один - читающий из того файла.

  • Что является сокетом: сетевой сокет является в основном каналом программного обеспечения или ссылкой, с помощью то, какие процессы на той же или другой машине могут связаться. Сокет отдельно не делает многого, но если он связывается с сетевым портом (как порт 80 для HTTP или порта 554 для мультимедийного потока RTSP) процессы на той же или другой машине - затем, Ваше программное обеспечение может говорить с другим программным обеспечением.

    Основная идея подобна: сделайте именованный сокет, как /tmp/my_socket.sock и имейте два или больше разговора о команде через этот сокет (запись И чтение), обычно с одной командой, являющейся "сервером" и всегда слушающей на том сокете.

  • Как какое-либо из этого касается SSH? По умолчанию ssh сервер работает на порте 22 и будет сетевой сокет, выделенный для того (помните то, что я сказал о порте наличия сокета?). Иногда полезно заставить SSH туннелировать. Например, если у нас есть эта установка

    Client Computer A -> Firewall Linux Server B ->  Linux Server with Website C
     IP: 172.16.127.1      IP: 172.16.127.2(ssh port 22)    IP: 172.16.127.3 (website on port 80)
    

    и мы хотим иметь безопасное соединение от Клиента к Веб-сайту C, мы выполнили бы ssh:

    ssh  -L 172.16.127.1:8877:172.16.127.3:80 my_username@172.16.127.2
    

    Это называют перенаправлением портов: теперь можно открыться в браузере http://172.16.127.1:8877 на Компьютере A и это перенаправит к веб-сайту на Сервере Linux C. Обратите внимание, что 8877 случайный неиспользуемый порт. Если порт уже используется - можно хотеть найти другой неиспользуемый порт, что-либо выше 1000 должно быть прекрасным.

    Конечно, это не всегда удобно, поскольку это сохранит сессию открытой. И это - то, где Вы могли создать именованный сокет иначе, Сокет Домена Unix  and управляет ssh сессией в фоне, не имея необходимость иметь открытую оболочку.

Таким образом, это - то, где мы можем ответить на фактический вопрос, связанный с кавычкой из книги, Вы упомянули:

  • ssh-агент: В определенных ситуациях мы не хотим хотеть сохранить ssh учетные данные на сервере, с которым мы пытаемся соединиться. Поэтому Вы запустили программное обеспечение агента SSH (для Windows, Вы могли использовать Театрализованное представление иначе Агент PuTTY). SSH_AUTH_SOCKET (например, SSH_AUTH_SOCKET=/tmp/my_auth.sock ) переменная среды будет иметь путь Сокета Домена Unix через который ssh команда может говорить с агентом и подтвердить, что Ваш вход в систему является надлежащим. Это было бы полезно в моем предыдущем примере, если мы хотим удостовериться, что соединение с Сервером Брандмауэра Linux B подлинно - имя пользователя - то, кто они действительно - затем Вы использовали бы ssh агент на Компьютере A.

    И это очень полезно, если у нас есть много Серверов C и много Серверов Брандмауэра B - хранение паролей на многих, Сервер B машины не является защищенным, ни практичным.

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

1
ответ дан 21 December 2019 в 23:42

Другие вопросы по тегам:

Похожие вопросы: