Нашел учебник для этого, посмотрев:
Это было первоначально обсуждено и разобрано пользователями github imjakey, fpqc, qris, therealkenc, Manouchehri и aseering (я) здесь:
https://github.com/Microsoft/BashOnWindows/issues/612
Обратите внимание, что запуск sshd имеет последствия для безопасности. До тех пор, пока модель безопасности WSL больше не будет выпекаться, вы должны предполагать, что любой, кто может использовать ssh в вашем Windows-боксе, имеет разрешение на выполнение любой команды от имени пользователя Windows, выполняющего sshd, независимо от разрешений уровня Linux. (Разрешения, вероятно, более строгие, чем на практике, но исходная модель безопасности WSL не должна быть слишком сложной.)
Попытка объединить инструкции от github:
- Генерация ключей хоста SSH путем запуска
sudo dpkg-reconfigure
openssh-server
в оболочке bash
- Бегать
sudo nano /etc/ssh/sshd_config
; отредактируйте UsePrivilegeSeparation yes
строку для чтения
UsePrivilegeSeparation no
. (Это необходимо, поскольку
UsePrivilegeSeparation
используется chroot()
системный вызов, который в настоящее время не поддерживается WSL.)
- Во время редактирования
/etc/ssh/sshd_config
вы можете изменить его
PasswordAuthentication no
на PasswordAuthentication yes
. В противном случае вам придется настроить ключи SSH.
- Сохранить
/etc/ssh/sshd_config
и выйти.
Запустите sudo visudo
для редактирования файла sudoers. Добавьте строку
$USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
заменив $ USER на ваше имя пользователя в Linux. Сохранить и выйти. Если visudo жалуется, что ваши изменения недействительны, исправляйте их до тех пор, пока они не сообщат, что они действительны; в противном случае вы можете сломать sudo в вашей системе!
- На стороне Windows отредактируйте брандмауэр Windows (и любые сторонние брандмауэры, которые вы, возможно, используете), чтобы разрешить входящий трафик через порт 22. Поскольку это не сверхзащищенная установка, я рекомендую разрешать входящий трафик только из дома ( частные) и доменные сети, а не из публичного интернета.
Создайте текстовый файл
autostartssh.vbs
в Windows, содержащий следующее:
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
- Дважды щелкните по сценарию. Должен запуститься sshd; Вы должны быть в состоянии SSH на вашем компьютере Windows.
- Откройте планировщик задач Windows. Добавьте задачу, которая запускается
autostartssh.vbs
при загрузке системы. Используйте wscript.exe
в качестве команды для запуска и расположение сценария VBS в качестве параметра.
И все - ваш компьютер под управлением Windows должен работать на сервере Linux openssh!
UsePrivilegeSeparation = yes
, за исключением того, что необходимо также запуститьsudo /bin/mkdir -p /var/run/sshd
(для создания каталогов разделения привилегий) перед запуском sshd. Поддерживает ли WLS теперь chroot (), есть ли обходной путь в исходном коде openssh, или эта= No
настройка является большей рекомендацией по безопасности? Кроме того, задача Windows, кажется, работает только для меня, если мой пользователь вошел в систему./etc/ssh/sshd_config
которая читает,Port 22
и переключитесь наPort 8822
. Одной из причин этого является то, что Windows запускает какой-то SSH-процесс 22-го числа. Я видел предположения о том, что нет проблем с отключением этого, но я нашел, что проще всего просто переключить WSL-порт SSH.Мне нужно было сделать то же самое.
Вот как можно загрузить подсистему Ubuntu Linux со всеми службами cron при загрузке Windows и предоставить средства для «перезагрузки» подсистемы Linux.
Я успешно размещаю на нашем сервере базу данных openssh-server, nginx & mariadb.
Установить подсистему Linux
Вставить:
Установите Ubuntu из Магазина Windows.
Удалить запрос пароля sudo (обязательно)
Вставить:
Включить вход по паролю SSH (необязательно)
Вставить:
Автозапуск Windows при запуске (требуется, если у вас есть пароль или RDP)
Перейти к
Создайте новую строку
DefaultPassword
и напишите пароль пользователя в качестве значения.Запустите bash / cron loop при запуске
linux.bat
вshell:startup
Вставить:
Добавить приложения / сервисы для запуска на cron
sudo crontab -e
Добавьте загрузочные приложения, такие как openssh-server, nginx, mysql, php:
Сохраните и выйдите из:, ctrlxзатем нажмите yи enter.
Перезагрузите подсистему Linux без перезагрузки Windows
Открыть Bash или SSH в
Это закроет текущий экземпляр и создаст новый, применяя cron.
Extra - Установить PHP 7.1 (не так просто)
Запустите команды ниже для довольно стандартной установки:
Запустите команду ниже для установки «OwnCloud»:
Extra - Установите веб-сервер nginx
Выполните команды ниже для базовой установки с PHP7.1:
Extra - Установить базу данных mysql от mariadb
Выполните команды ниже для сервера базы данных mysql:
При появлении запроса установите пароль пользователя корневой базы данных.
источник
Ответ @poma очень хороший, и на этом основан мой ответ. Я хочу добавить некоторые улучшения, хотя:
service
вместоsshd
прямого вызова :'sudo service ssh start'
вместо'sudo /usr/sbin/sshd -D'
. Таким образом, даже если вы вызовете сценарий несколько раз, будет только одинsshd
процесс. Кроме того, его легко убить с помощью другого запускаемого скрипта'sudo service ssh stop'
. В файле sudoers вам просто нужно заменить/usr/sbin/sshd -D
на/usr/sbin/service
.sshd
непосредственно, избавиться от-D
варианта , потому что поставит процесс на переднем плане на неопределенный срок. Если вы не верите, просто сделать ,top
и вы увидитеinit
и вsudo
процесс каждый раз , когда вы назвали сценарий. Не забудьте также удалить-D
опцию в файле sudoers!autostartsshd.ps1
и вставить в следующем:bash -c 'sudo service ssh start'
. Чтобы выполнить скрипт, щелкните его правой кнопкой мыши и нажмитеRun with PowerShell
.Другой вопрос переполнения стека имеет аналогичные шаги: /superuser//a/1114162/182590
Надеюсь, что это помогает кому-то :)
источник
sudo service ssh start
и закроете bash, это убьет демона ssh. По крайней мере, так было в момент написания моего руководства.вставьте
bash -c "echo [password] | service ssh start"
скрипт запуска Windows и используйте собственный пароль sudo вместо [password]источник
sudo
ключевое слово, которое подразумевает ваше предложение). Это просто не работает. Не то, чтобы вы когда-либо хранили свой пароль в незашифрованном виде в любом случае!Ответы @Poma и @Hintron отличные.
Я хотел бы расширить описание последнего пункта, как добавить задачу ssh в Windows Task Scheduler, так как для этого требуется переключение некоторых параметров:
Используется прямой вызов bash. Нет необходимости заключать его в сценарии VBS или PowerShell.
Я использую сервисную команду по причинам, которые объяснил @Hintron. Кроме того, прямой sshd-вызов дает ошибку
В таком случае следует добавить эту запись по
sudo visudo
командеТакже обратите внимание, что здесь все пользователи (первый столбец) могут запускать или останавливать sshd. Если вы только один пользователь этого компьютера с Windows, то все должно быть в порядке.
источник
Создайте файл с именем
wsl_setup.bat
и добавьте содержимое следующим образомДобавить
wsl_setup.bat
файл в папку автозагрузки windows windows-10-change-startup-appsПерезагрузите и войдите в свою учетную запись Windows (да, вам нужно войти)
источник