Вопрос или проблема
Нам нужно, чтобы домашний каталог пользователя 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 кажется, что есть некоторые обходные пути…
Я только что наткнулся на ту же проблему.
Вот что я сделал, чтобы решить это в моем случае:
- Добавьте свой пароль в частную область реестра LSA – убедитесь, что вы понимаете последствия безопасности, описанные в Переключение контекста пользователя, которые можно подвести к следующему: “Если вы являетесь пользователем и единственным администратором своей системы или вы можете доверять администраторам, и ваша система адекватно защищена от вредоносного доступа, вы, вероятно, можете безопасно использовать этот метод, в противном случае – нет“. Поэтому, если вы хотите продолжить, запустите терминал Cygwin от имени администратора и выполните
passwd -R
, который запросит у вас ввод пароля пользователя. - Настройте Cygserver. Не уверен, что это действительно необходимо, но в моем случае это не помешало, и кэширование учетных данных пользователей для всех процессов Cygwin звучало как хорошая идея. Это было сделано просто запустив
cygserver-config
из терминала Cygwin от имени администратора. Затем я перезагрузил Windows, чтобы новые процессы Cygwin использовали Cygserver и мои сохраненные учетные данные. - Как указала Коринна Виншен на почтовом списке 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
-
Сессионная природа соединения: При подключении по протоколу SSH создается новая сессия, которая не наследует смонтированные ресурсы от родительской сессии командной строки Windows. То есть, сетевые диски, смонтированные в одном терминале, не будут доступны в другом сеансе.
-
Контекст безопасности (ntsec): Cygwin использует Windows API для работы с файловой системой, что приводит к тому, что контекст безопасности установленных сетевых ресурсов не может быть перенесен в новую SSH-сессию. Это значит, что необходимо явно повторно смонтировать сетевые диски в контексте новой сессии.
Решения проблемы
Исходя из вышеизложенного, можно предложить несколько решений для обеспечения доступа к сетевым дискам в SSH-сеансе:
-
Использование учетных данных LSA: Добавление вашего пароля в область реестра LSA (Local Security Authority) позволяет избежать ввода учетных данных при каждом подключении. Это требует запуска Cygwin от имени администратора и выполнения команды:
passwd -R
Однако следует учитывать, что данный метод потенциально несет риски безопасности.
-
Настройка Cygserver: Установка и настройка Cygserver помогает кэшировать учетные данные для всех процессов Cygwin. Это можно сделать с помощью команды:
cygserver-config
После настройки Cygserver стоит перезагрузить систему, чтобы новые процессы Cygwin могли использовать его.
-
Повторное монтирование сетевого диска в скрипте: Добавление в файл
~/.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.