Ответы:
Нашел учебник для этого, посмотрев:
Это было первоначально обсуждено и разобрано пользователями 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 (да, вам нужно войти)