Почему сетевые диски (например, /cygdrive/w, смонтированные на //foo/whatever) НЕ отображаются при подключении по ssh?

Вопрос или проблема

Нам нужно, чтобы домашний каталог пользователя Linux (который экспортируется через NFS и Samba) был тем же домашним каталогом этого пользователя в оболочке Cygwin bash, вызванной через ssh.

Окна оболочки в консоли Windows включают сетевые смонтированные диски, такие как W: (смонтированный на //machine/exportedDirectory через Samba), который появляется в /cygdrive/w

Когда подключаешься извне через ssh, /cygdrive/w не смонтирован.

Есть ли способ это реализовать?

Вы, возможно, сталкиваетесь с проблемой ntsec: https://cygwin.com/faq.html#faq.using.shares

Лично я никогда не смог сделать это совершенно правильно, но из FAQ кажется, что есть некоторые обходные пути…

Я только что наткнулся на ту же проблему.

Вот что я сделал, чтобы решить это в моем случае:

  1. Добавьте свой пароль в частную область реестра LSA – убедитесь, что вы понимаете последствия безопасности, описанные в Переключение контекста пользователя, которые можно подвести к следующему: “Если вы являетесь пользователем и единственным администратором своей системы или вы можете доверять администраторам, и ваша система адекватно защищена от вредоносного доступа, вы, вероятно, можете безопасно использовать этот метод, в противном случае – нет“. Поэтому, если вы хотите продолжить, запустите терминал Cygwin от имени администратора и выполните passwd -R, который запросит у вас ввод пароля пользователя.
  2. Настройте Cygserver. Не уверен, что это действительно необходимо, но в моем случае это не помешало, и кэширование учетных данных пользователей для всех процессов Cygwin звучало как хорошая идея. Это было сделано просто запустив cygserver-config из терминала Cygwin от имени администратора. Затем я перезагрузил Windows, чтобы новые процессы Cygwin использовали Cygserver и мои сохраненные учетные данные.
  3. Как указала Коринна Виншен на почтовом списке Cygwin, вход через ssh – это другая сессия, и монтирования Windows хранятся только на основе сессии. Решение заключалось в вызове net use <буква диска>: '<сетевое подключение>' после входа через SSH, что я сделал, добавив следующий фрагмент к моему ~/.bashrc файлу (благодарности ответу Гилла):
# Для доступа по SSH убедитесь, что сетевые диски доступны:
if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
  net use  W: '\\machine\exportedDirectory'
fi

Ответ или решение

Когда вы подключаетесь к Cygwin через SSH и не видите смонтированные сетевые диски, такие как /cygdrive/w, это может быть вызвано несколькими факторами, связанными с контекстами пользователей и способами монтирования ресурсов в Windows. Давайте разберемся подробнее.

Причины отсутствия сетевых дисков при подключении по SSH

  1. Сессионная природа соединения: При подключении по протоколу SSH создается новая сессия, которая не наследует смонтированные ресурсы от родительской сессии командной строки Windows. То есть, сетевые диски, смонтированные в одном терминале, не будут доступны в другом сеансе.

  2. Контекст безопасности (ntsec): Cygwin использует Windows API для работы с файловой системой, что приводит к тому, что контекст безопасности установленных сетевых ресурсов не может быть перенесен в новую SSH-сессию. Это значит, что необходимо явно повторно смонтировать сетевые диски в контексте новой сессии.

Решения проблемы

Исходя из вышеизложенного, можно предложить несколько решений для обеспечения доступа к сетевым дискам в SSH-сеансе:

  1. Использование учетных данных LSA: Добавление вашего пароля в область реестра LSA (Local Security Authority) позволяет избежать ввода учетных данных при каждом подключении. Это требует запуска Cygwin от имени администратора и выполнения команды:

    passwd -R

    Однако следует учитывать, что данный метод потенциально несет риски безопасности.

  2. Настройка Cygserver: Установка и настройка Cygserver помогает кэшировать учетные данные для всех процессов Cygwin. Это можно сделать с помощью команды:

    cygserver-config

    После настройки Cygserver стоит перезагрузить систему, чтобы новые процессы Cygwin могли использовать его.

  3. Повторное монтирование сетевого диска в скрипте: Добавление в файл ~/.bashrc определенного кода, который будет автоматически монтировать сетевой диск при каждом входе по SSH. Например:

    # Для доступа по SSH убедитесь, что сетевые диски доступны:
    if [ -n "$SSH_CLIENT" ] || [ -n "$SSH_TTY" ]; then
     net use W: '\\machine\exportedDirectory'
    fi

    Этот фрагмент кода проверяет, находится ли сессия в SSH, и если да, то выполняет команду для монтирования.

Заключение

Согласно вышеприведенным методам, вы можете обеспечить доступ к сетевым дискам для пользователей при подключении через SSH в Cygwin. Однако, поскольку это может повлиять на безопасность вашей системы, важно хорошо понимать эти изменения и принимать меры предосторожности. Использование Cygserver и добавление учетных данных LSA может значительно упростить работу с сетевыми ресурсами, однако всегда следуйте best practices в плане безопасности.

SEO Оптимизация

Эта статья может быть полезна как для администраторов, так и для пользователей Cygwin, желающих разобраться с проблемой доступа к сетевым ресурсам через SSH. Для получения дальнейшей информации и инструкций по каждому из вышеперечисленных шагов, рекомендуем посетить официальную документацию Cygwin и соответствующие FAQ.

Оцените материал
Добавить комментарий

Капча загружается...