[Системное администрирование] CIFS over SSH штатными средствами Windows 10
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Я ленивый и потому люблю когда все организовано удобно, без лишних телодвижений. Иногда перебарываю лень, для того чтобы сделать удобно.
Однажды в потребовалось мне организовать доступ к серверу по протоколу SMB и в поиске решения я наткнулся на следующую статью: Mounting your Nikhef home directory using SSH for Windows 8. Это было простое и удобное решение, которое использовало Putty. Чуть позже мне пришлось настраивать это решение на другом компьютере и я понял, что Putty тут лишний с тех пор как в Windows 10 появился встроенный ssh-клиент на основе OpenSSH.
Под катом — идентичная схема, только с использованием OpenSSH под Windows 10.
У меня схема организована следующим образом:
- На сервере запущена Samba, от имени пользователя www-data расшарена корневая папка с сайтами. Доступ к серверу только через ssh с авторизацией по ключу. Сервер за NATом, порт проброшен только для ssh.
- В процессе входа в аккаунт на домашней машине на Windows 10 через встроенный в систему OpenSSH устанавливается соединение с сервером с авторизацией по ключу.
- Туннелируется порт 445 удаленной машины на локальный порт 44445 сетевого loopback-адаптера доступного по адресу 10.255.255.1
- На loopback-адаптере 10.255.255.1 порт 44445 проксируется на локальный 445. Таким образом при подключении к \\10.255.255.1\ открывается удаленная шара с файлами (которая, при необходимости монтируется как сетевой диск).
Всё это автоматом – лень торжествует. Безопасно, быстро и нативно выглядит. Любым редактором могу открывать и править файлы на удаленном сервере как у себя на локальном — без проблем с загрузкой правленых файлов и установкой им необходимых разрешений. При этом нет проблем с безопасностью Samba.
Итак – сперва по шагам:
На стороне WINDOWS
Должен быть установлены OpenSSH. В Windows 10 и Windows Server 2019 появился встроенный SSH клиент на основе OpenSSH. Им мы и воспользуемся. Сначала убедимся что он установлен – наберем в командной строке
ssh
Если видим исполнение команды — все "Ок", клиент присутствует в системе.
Шаг 1. Настройка сетевого адаптера
Устанавливаем loopback-адаптер в системе. Мы будем обращаться по адресу к локальному адаптеру.
hdwwiz.exe
Запустится «Мастер установки оборудования» (Здесь я пользуюсь русской Windows 10 Pro).
«Далее» -> «Установка оборудования, выбранного из списка вручную» -> «Сетевые адаптеры» -> «Microsoft –> Адаптер замыкания на себя Microsoft KM-Test» -> «Далее»
Уверен, что эти шаги можно сделать из командной строки, но не нашел способ установки драйвера без devcon.exe, потому и не стал заморачиваться с автоматизацией этого шага.
Далее уже в CMD (от имени Администратора).
netsh interface show interface
Видим появился второй адаптер. У меня он называется Ethernet 2.
Теперь настроим адрес для этого адаптера
Или из командной строки:
netsh interface ip set address name="Ethernet 2" source=static address=10.255.255.1 mask=255.255.255.0
В результате у нас появился адаптер локально доступный по адресу 10.255.255.1
Теперь проблема в том, что нам необходимо получить доступ к общей папке через TCP-порт 445, но при загрузке Windows этот порт захватывается системным драйвером lanmanserver для всех интерфейсов. Отложив запуск драйвера lanmanserver и установив правило portproxy, мы можем обойти это.
Далее в командной строке от имени администратора меняем режим запуска сетевых служб (пробел после «start=» обязателен!!!):
sc config lanmanserver start= demand
sc config iphlpsvc start= auto
и настраиваем для адаптера с адресом 10.255.255.1 проксирование порта 44445 на локальный порт 445
netsh interface portproxy add v4tov4 listenaddress=10.255.255.1 listenport=445 connectaddress=10.255.255.1 connectport=44445
Теперь необходимо перезагрузиться, чтобы схема перехвата порта у службы lanmanserver сработала.
Проверяем что прослушивание порта осуществляется нашим loopback-адаптером, просмотрев открытые в системе порты
netstat -an | find ":445 "
Если мы видим
TCP 10.255.255.1:445 0.0.0.0:0 LISTENING
значит все в порядке и порт прослушивается на нужном адресе. Если же мы видим "0.0.0.0:445" — значит в нашей схеме что-то не сработало правильно. Проверить правила переадресации портов можно командой
netsh interface portproxy show v4tov4
Шаг 2. Ключ и рабочий скрипт
Создаем папку для вспомогательных файлов. Встроим, так сказать в систему наш способ.
mkdir %APPDATA%\CIFSoverSSH
cd %APPDATA%\CIFSoverSSH
Генерируем ключ для ssh-авторизации (назовем его, например: cifsoversshkey)
ssh-keygen -t rsa -N "" -f cifsoversshkey
В результате будет сгенерирована пара открытого и закрытого ключа. Для того, чтобы OpenSSH не выдавал сообщение UNPROTECTED PRIVATE KEY FILE! нужно изменить права на файл ключа. Задачу мы будем запускать для одного пользователя, от имени которого мы собираемся работать в Windows. Можно через GUI, но мне мне показалось что картинок уже достаточно. В Windows это сделаем следующей командой:
icacls cifsoversshkey /RESET
icacls cifsoversshkey /grant Имя_Пользователя:F /inheritance:r
В результате текущий пользователь будет назначен владельцем, отключено наследование и удалены унаследованные права. Проверить мы это сможем командой
icacls cifsoversshkey
Должны быть права только для текущего пользователя, иначе файл ключа не будет принят программой OpenSSH и соединение не будет подниматься!
Создадим в текущей папке пакетный файл cifsoverssh.cmd следующего содержания:
call cmd /c start "" /B C:\Windows\System32\OpenSSH\ssh.exe user@111.111.111.111 -p remoteport -i %APPDATA%\CIFSoverSSH\cifsoversshkey -L 10.255.255.1:44445:localhost:445 -N -o "StrictHostKeyChecking=no"
Где:
user@111.111.111.111 – пользователь на стороне linux сервера @ адрес удаленного сервера
Шаг 3. Ярлык или задача в планировщике
Создаем ярлык для следующей команды: powershell -nologo -noninteractive -windowStyle hidden -command "%APPDATA%\CIFSoverSSH\cifsoversshkey.cmd"
Это позволит запускать наш пакетный файл через powershell без открытия окна. Если запускать его через CMD будет открываться черное окно терминала и будет висеть все время, пока соединение будет установлено, а это неудобно и некрасиво.
Для автоматизации запуска при входе в систему можно создать задачу в планировщике:
schtasks /CREATE /RU %username% /TN "CIFS over SSH" /TR "powershell.exe -nologo -noninteractive -windowStyle hidden -command %APPDATA%\CIFSoverSSH\cifsoversshkey.cmd" /SC ONLOGON /DELAY 0000:10 /IT /RL highest
На стороне клиентского компьютера Windows все приготовления были закончены.
Настройка Linux сервера
Предполагается, что ssh-сервер был предварительно настроен и включена авторизация по ключу.
Подключаемся по ssh из командной строки на windows-машине
C:\Windows\System32\OpenSSH\ssh.exe user@111.111.111.111 -p remoteport
В домашней папке пользователя, от имени которого мы будем авторизовываться при создании туннеля ищем файл ~/.ssh/authorized_keys (если файл отсутствует – создадим его).
mkdir ~/.ssh && touch ~/.ssh/authorized_keys
Теперь необходимо в этот файл вставить содержимое нашего файла публичного ключа, созданного на нашей windows-машине (файл %APPDATA%\CIFSoverSSH\cifsoversshkey.pub). Откроем его в любом редакторе и вставим цепочку ключа с новой строки. Если есть другие ключи, просто вставим его с новой строки.
Устанавливаем Samba (на примере Debian)
apt update && apt install samba
Переименовываем старый файл настроек и создаем новый файл
mv /etc/samba/smb.conf /etc/samba/smb.conf.old
touch /etc/samba/smb.conf
Открываем пустой файл настроек и приводим его к следующему виду:
[global]
realm = webserver
server string = Web server
workgroup = WORKGROUP
# Setup charsets
dos charset = cp1251
unix charset = utf8
# Disable printers
load printers = No
show add printer wizard = no
printcap name = /dev/null
disable spoolss = yes
# Setup logging
log file = /var/log/smbd.log
max log size = 50
max xmit = 65536
debug level = 1
# Setup daemon settings
domain master = No
preferred master = Yes
socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=65536 SO_RCVBUF=65536 SO_KEEPALIVE
os level = 65
use sendfile = Yes
dns proxy = No
dont descend = /proc,/dev,/etc
deadtime = 15
# Enable synlinks
unix extensions = No
wide links = yes
follow symlinks = yes
# Securtity settings
security = user
map to guest = Bad Password
guest account = nobody
create mask = 0664
directory mask = 0775
hide dot files = yes
client min protocol = SMB2
client max protocol = SMB3
[ShareName]
comment = Sites folder
path = /home/web
force user = www-data
force group = www-data
read only = No
guest ok = Yes
writable = yes
create mask = 0664
directory mask = 2775
В последней секции мы настраиваем непосредственно шару. В названии секции указываем имя шары ShareName. Path = путь к файлам, которые мы хотим расшарить. В параметрах force user и force group указываем linux-пользователя, от имени которого будут сохраняться файлы при изменении и создании в шаре. Так как у меня там лежат файлы для веб-сервера – у меня пользователь www-data
Перезапускаем Samba
systemctl restart smbd
Отключаемся и выходим в командную строку Windows
exit
Всё готово. Теперь остается только запустить наш ярлык или выйти из профиля пользователя windows и снова войти (если вы создали задачу в планировщике).
После этого ваша удаленная шара будет доступна по адресу \10.255.255.1\ShareName — Можно даже монтировать её как сетевой диск.
===========
Источник:
habr.com
===========
Похожие новости:
- [Системное администрирование, Разработка под Windows, Софт] Обновление KB4586781 для Windows 10 вызывает ошибки в системах
- LazySSH, SSH-сервер для запуска временных виртуальных машин
- [Системное администрирование, Восстановление данных, Хранение данных, Компьютерное железо, Накопители] Хождение по рукам или грустные реалии рынка услуг восстановления данных
- [Системное администрирование] «Данная ситуация выходит за рамки наших компетенций» – как быстро и просто остаться без ESD ключей
- [Информационная безопасность, Системное администрирование, Софт, Процессоры] Microsoft выпустила обновления для Windows 10 c исправлением микрокода Intel — патчи против уязвимости типа Platypus
- [Системное администрирование, Серверное администрирование, Управление разработкой, DevOps] Приглашаем на митап «Apache Kafka в вопросах и ответах» 17 ноября в 19:00
- [Разработка под Windows, Софт] Microsoft принудительно обновит системы под управлением Windows 10 1903 до версии 1909
- [Системное администрирование, IT-инфраструктура, Серверное администрирование, DevOps] Тестирование Ansible с использованием Molecule с Ansible в качестве верификатора (перевод)
- [Информационная безопасность, Системное администрирование, Сетевые технологии] Белые начинают: так ли уж хороши “хорошие” боты?
- [Информационная безопасность, Системное администрирование, Сетевые технологии, Сетевое оборудование] Fortinet Security Fabric на практике. Часть 1. Общий обзор
Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_cifs, #_ssh, #_openssh, #_windows_10, #_udalennyj_dostup_k_fajlam (удаленный доступ к файлам), #_sistemnoe_administrirovanie (
Системное администрирование
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 03-Дек 22:57
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Я ленивый и потому люблю когда все организовано удобно, без лишних телодвижений. Иногда перебарываю лень, для того чтобы сделать удобно. Однажды в потребовалось мне организовать доступ к серверу по протоколу SMB и в поиске решения я наткнулся на следующую статью: Mounting your Nikhef home directory using SSH for Windows 8. Это было простое и удобное решение, которое использовало Putty. Чуть позже мне пришлось настраивать это решение на другом компьютере и я понял, что Putty тут лишний с тех пор как в Windows 10 появился встроенный ssh-клиент на основе OpenSSH. Под катом — идентичная схема, только с использованием OpenSSH под Windows 10. У меня схема организована следующим образом:
Всё это автоматом – лень торжествует. Безопасно, быстро и нативно выглядит. Любым редактором могу открывать и править файлы на удаленном сервере как у себя на локальном — без проблем с загрузкой правленых файлов и установкой им необходимых разрешений. При этом нет проблем с безопасностью Samba. Итак – сперва по шагам: На стороне WINDOWS Должен быть установлены OpenSSH. В Windows 10 и Windows Server 2019 появился встроенный SSH клиент на основе OpenSSH. Им мы и воспользуемся. Сначала убедимся что он установлен – наберем в командной строке ssh
Если видим исполнение команды — все "Ок", клиент присутствует в системе. Шаг 1. Настройка сетевого адаптера Устанавливаем loopback-адаптер в системе. Мы будем обращаться по адресу к локальному адаптеру. hdwwiz.exe
Запустится «Мастер установки оборудования» (Здесь я пользуюсь русской Windows 10 Pro). «Далее» -> «Установка оборудования, выбранного из списка вручную» -> «Сетевые адаптеры» -> «Microsoft –> Адаптер замыкания на себя Microsoft KM-Test» -> «Далее» Уверен, что эти шаги можно сделать из командной строки, но не нашел способ установки драйвера без devcon.exe, потому и не стал заморачиваться с автоматизацией этого шага. Далее уже в CMD (от имени Администратора). netsh interface show interface
Видим появился второй адаптер. У меня он называется Ethernet 2. Теперь настроим адрес для этого адаптера Или из командной строки: netsh interface ip set address name="Ethernet 2" source=static address=10.255.255.1 mask=255.255.255.0
В результате у нас появился адаптер локально доступный по адресу 10.255.255.1 Теперь проблема в том, что нам необходимо получить доступ к общей папке через TCP-порт 445, но при загрузке Windows этот порт захватывается системным драйвером lanmanserver для всех интерфейсов. Отложив запуск драйвера lanmanserver и установив правило portproxy, мы можем обойти это. Далее в командной строке от имени администратора меняем режим запуска сетевых служб (пробел после «start=» обязателен!!!): sc config lanmanserver start= demand
sc config iphlpsvc start= auto и настраиваем для адаптера с адресом 10.255.255.1 проксирование порта 44445 на локальный порт 445 netsh interface portproxy add v4tov4 listenaddress=10.255.255.1 listenport=445 connectaddress=10.255.255.1 connectport=44445
Теперь необходимо перезагрузиться, чтобы схема перехвата порта у службы lanmanserver сработала. Проверяем что прослушивание порта осуществляется нашим loopback-адаптером, просмотрев открытые в системе порты netstat -an | find ":445 "
Если мы видим TCP 10.255.255.1:445 0.0.0.0:0 LISTENING
значит все в порядке и порт прослушивается на нужном адресе. Если же мы видим "0.0.0.0:445" — значит в нашей схеме что-то не сработало правильно. Проверить правила переадресации портов можно командой netsh interface portproxy show v4tov4
Шаг 2. Ключ и рабочий скрипт Создаем папку для вспомогательных файлов. Встроим, так сказать в систему наш способ. mkdir %APPDATA%\CIFSoverSSH
cd %APPDATA%\CIFSoverSSH Генерируем ключ для ssh-авторизации (назовем его, например: cifsoversshkey) ssh-keygen -t rsa -N "" -f cifsoversshkey
В результате будет сгенерирована пара открытого и закрытого ключа. Для того, чтобы OpenSSH не выдавал сообщение UNPROTECTED PRIVATE KEY FILE! нужно изменить права на файл ключа. Задачу мы будем запускать для одного пользователя, от имени которого мы собираемся работать в Windows. Можно через GUI, но мне мне показалось что картинок уже достаточно. В Windows это сделаем следующей командой: icacls cifsoversshkey /RESET
icacls cifsoversshkey /grant Имя_Пользователя:F /inheritance:r В результате текущий пользователь будет назначен владельцем, отключено наследование и удалены унаследованные права. Проверить мы это сможем командой icacls cifsoversshkey
Должны быть права только для текущего пользователя, иначе файл ключа не будет принят программой OpenSSH и соединение не будет подниматься! Создадим в текущей папке пакетный файл cifsoverssh.cmd следующего содержания: call cmd /c start "" /B C:\Windows\System32\OpenSSH\ssh.exe user@111.111.111.111 -p remoteport -i %APPDATA%\CIFSoverSSH\cifsoversshkey -L 10.255.255.1:44445:localhost:445 -N -o "StrictHostKeyChecking=no"
Где: user@111.111.111.111 – пользователь на стороне linux сервера @ адрес удаленного сервера Шаг 3. Ярлык или задача в планировщике Создаем ярлык для следующей команды: powershell -nologo -noninteractive -windowStyle hidden -command "%APPDATA%\CIFSoverSSH\cifsoversshkey.cmd" Это позволит запускать наш пакетный файл через powershell без открытия окна. Если запускать его через CMD будет открываться черное окно терминала и будет висеть все время, пока соединение будет установлено, а это неудобно и некрасиво. Для автоматизации запуска при входе в систему можно создать задачу в планировщике: schtasks /CREATE /RU %username% /TN "CIFS over SSH" /TR "powershell.exe -nologo -noninteractive -windowStyle hidden -command %APPDATA%\CIFSoverSSH\cifsoversshkey.cmd" /SC ONLOGON /DELAY 0000:10 /IT /RL highest
На стороне клиентского компьютера Windows все приготовления были закончены. Настройка Linux сервера Предполагается, что ssh-сервер был предварительно настроен и включена авторизация по ключу. Подключаемся по ssh из командной строки на windows-машине C:\Windows\System32\OpenSSH\ssh.exe user@111.111.111.111 -p remoteport
В домашней папке пользователя, от имени которого мы будем авторизовываться при создании туннеля ищем файл ~/.ssh/authorized_keys (если файл отсутствует – создадим его). mkdir ~/.ssh && touch ~/.ssh/authorized_keys
Теперь необходимо в этот файл вставить содержимое нашего файла публичного ключа, созданного на нашей windows-машине (файл %APPDATA%\CIFSoverSSH\cifsoversshkey.pub). Откроем его в любом редакторе и вставим цепочку ключа с новой строки. Если есть другие ключи, просто вставим его с новой строки. Устанавливаем Samba (на примере Debian) apt update && apt install samba
Переименовываем старый файл настроек и создаем новый файл mv /etc/samba/smb.conf /etc/samba/smb.conf.old
touch /etc/samba/smb.conf Открываем пустой файл настроек и приводим его к следующему виду: [global]
realm = webserver server string = Web server workgroup = WORKGROUP # Setup charsets dos charset = cp1251 unix charset = utf8 # Disable printers load printers = No show add printer wizard = no printcap name = /dev/null disable spoolss = yes # Setup logging log file = /var/log/smbd.log max log size = 50 max xmit = 65536 debug level = 1 # Setup daemon settings domain master = No preferred master = Yes socket options = IPTOS_LOWDELAY TCP_NODELAY SO_SNDBUF=65536 SO_RCVBUF=65536 SO_KEEPALIVE os level = 65 use sendfile = Yes dns proxy = No dont descend = /proc,/dev,/etc deadtime = 15 # Enable synlinks unix extensions = No wide links = yes follow symlinks = yes # Securtity settings security = user map to guest = Bad Password guest account = nobody create mask = 0664 directory mask = 0775 hide dot files = yes client min protocol = SMB2 client max protocol = SMB3 [ShareName] comment = Sites folder path = /home/web force user = www-data force group = www-data read only = No guest ok = Yes writable = yes create mask = 0664 directory mask = 2775 В последней секции мы настраиваем непосредственно шару. В названии секции указываем имя шары ShareName. Path = путь к файлам, которые мы хотим расшарить. В параметрах force user и force group указываем linux-пользователя, от имени которого будут сохраняться файлы при изменении и создании в шаре. Так как у меня там лежат файлы для веб-сервера – у меня пользователь www-data Перезапускаем Samba systemctl restart smbd
Отключаемся и выходим в командную строку Windows exit
Всё готово. Теперь остается только запустить наш ярлык или выйти из профиля пользователя windows и снова войти (если вы создали задачу в планировщике). После этого ваша удаленная шара будет доступна по адресу \10.255.255.1\ShareName — Можно даже монтировать её как сетевой диск. =========== Источник: habr.com =========== Похожие новости:
Системное администрирование ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 03-Дек 22:57
Часовой пояс: UTC + 5