Ответы:
Нашел учебник для этого, посмотрев:
Это было первоначально обсуждено и разобрано пользователями github imjakey, fpqc, qris, therealkenc, Manouchehri и aseering (я) здесь:
https://github.com/Microsoft/BashOnWindows/issues/612
Обратите внимание, что запуск sshd имеет последствия для безопасности. До тех пор, пока модель безопасности WSL больше не будет выпекаться, вы должны предполагать, что любой, кто может использовать ssh в вашем Windows-боксе, имеет разрешение на выполнение любой команды от имени пользователя Windows, выполняющего sshd, независимо от разрешений уровня Linux. (Разрешения, вероятно, более строгие, чем на практике, но исходная модель безопасности WSL не должна быть слишком сложной.)
Попытка объединить инструкции от github:
sudo dpkg-reconfigure
openssh-serverв оболочке bashsudo 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 в вашей системе!
Создайте текстовый файл
autostartssh.vbsв Windows, содержащий следующее:
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
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
Вставить:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
Установите Ubuntu из Магазина Windows.
Удалить запрос пароля sudo (обязательно)
Вставить:
sudo sed -i "s/%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" /etc/sudoers
Включить вход по паролю SSH (необязательно)
Вставить:
sudo sed -i '/StrictModes yes/c\StrictModes no' /etc/ssh/sshd_config
sudo sed -i '/ChallengeResponseAuthentication/c\ChallengeResponseAuthentication no' /etc/ssh/sshd_config
sudo sed -i '/PasswordAuthentication/c\PasswordAuthentication yes' /etc/ssh/sshd_config
Автозапуск Windows при запуске (требуется, если у вас есть пароль или RDP)
Перейти к
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
Создайте новую строку DefaultPasswordи напишите пароль пользователя в качестве значения.
Запустите bash / cron loop при запуске
linux.batвshell:startupВставить:
C:\Windows\System32\bash.exe -c 'while [ true ]; do sudo /usr/sbin/cron -f; done'
Добавить приложения / сервисы для запуска на cron
sudo crontab -eДобавьте загрузочные приложения, такие как openssh-server, nginx, mysql, php:
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
@reboot . $HOME/.profile; /usr/sbin/sshd -D
#@reboot . $HOME/.profile; service php7.1-fpm start # Uncomment for php7.1 fpm
#@reboot . $HOME/.profile; service mysql start # Uncomment for mysql/mariadb
#@reboot . $HOME/.profile; service nginx start # Uncomment for nginx
Сохраните и выйдите из:, ctrlxзатем нажмите yи enter.
Перезагрузите подсистему Linux без перезагрузки Windows
Открыть Bash или SSH в
sudo service ssh restart
Это закроет текущий экземпляр и создаст новый, применяя cron.
Extra - Установить PHP 7.1 (не так просто)
Запустите команды ниже для довольно стандартной установки:
mkdir /run/php && chmod -R 777 /run/php
sudo add-apt-repository ppa:ondrej/php && sudo apt update
PHPV=7.1 && sudo apt install --allow-unauthenticated -y php${PHPV}-fpm php${PHPV}-gd php${PHPV}-json php${PHPV}-mysqlnd php${PHPV}-curl php${PHPV}-intl php${PHPV}-mcrypt php${PHPV}-imagick php${PHPV}-zip php${PHPV}-xml php${PHPV}-mbstring
Запустите команду ниже для установки «OwnCloud»:
PHPV=7.1 && apt install --allow-unauthenticated -y php${PHPV}-redis redis-server php${PHPV}-ldap php${PHPV}-smbclient
Extra - Установите веб-сервер nginx
Выполните команды ниже для базовой установки с PHP7.1:
sudo add-apt-repository ppa:nginx/stable
sudo apt update && sudo apt -y install nginx
sudo sed -i 's:access_log /var/log/nginx/access.log;:access_log off;:g' /etc/nginx/nginx.conf
sudo sed -i '/index index.html/c\\tindex index.html index.php index.htm index.nginx-debian.html;' /etc/nginx/sites-available/default
STR='}\n\n\tlocation ~ \.php$ {\n\t\tinclude snippets\/fastcgi-php.conf;\n\t\tfastcgi_pass unix:\/var\/run\/php\/php7.1-fpm.sock;\n\t}'
sudo sed -i "0,/}/s//$STR\n/" /etc/nginx/sites-available/default
sudo service nginx restart
Extra - Установить базу данных mysql от mariadb
Выполните команды ниже для сервера базы данных mysql:
RELEASE=`lsb_release -a | tail -1 | cut -f2`
sudo apt install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository "deb [arch=i386,amd64,ppc64el] https://mirrors.evowise.com/mariadb/repo/10.3/ubuntu $RELEASE main"
sudo apt update && sudo apt --allow-unauthenticated -y install mariadb-server
При появлении запроса установите пароль пользователя корневой базы данных.
Ответ @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-вызов дает ошибку
Отсутствует каталог разделения привилегий: / var / run / sshd
В таком случае следует добавить эту запись по sudo visudoкоманде
ALL ALL = (root) NOPASSWD: /usr/sbin/service ssh *
Также обратите внимание, что здесь все пользователи (первый столбец) могут запускать или останавливать sshd. Если вы только один пользователь этого компьютера с Windows, то все должно быть в порядке.
Создайте файл с именем wsl_setup.batи добавьте содержимое следующим образом
wsl -u root -e sudo service ssh start
wsl -u root -e sudo service nginx start
Добавить wsl_setup.batфайл в папку автозагрузки windows windows-10-change-startup-apps
Перезагрузите и войдите в свою учетную запись Windows (да, вам нужно войти)