¿Cómo ejecutar el servicio Ubuntu en Windows (al inicio)?

¿Cómo ejecutar el servicio Ubuntu en Windows (al inicio)?

Quiero iniciar un servidor SSH en el subsistema Linux (Bash en Ubuntu en Windows) al iniciar Windows. El problema es que todos los procesos de Linux finalizan cuando se cierra la ventana de Bash.

¿Hay alguna manera de hacer que el proceso de Linux se ejecute permanentemente en segundo plano sin una ventana de bash?

Respuesta1

Encontré un tutorial para eso consultando:

Esto fue discutido y solucionado originalmente por los usuarios de github imjakey, fpqc, qris, therealkenc, Manouchehri y aseering (yo mismo) aquí:

https://github.com/Microsoft/BashOnWindows/issues/612

Tenga en cuenta que ejecutar sshd tiene implicaciones de seguridad. Hasta que el modelo de seguridad de WSL haya tenido más tiempo para prepararse, debe asumir que cualquiera que pueda ingresar mediante ssh a su caja de Windows tiene permiso para realizar cualquier comando como usuario de Windows que ejecuta sshd, independientemente de los permisos de nivel de Linux. (Los permisos probablemente sean más restrictivos que eso en la práctica, pero el modelo de seguridad inicial de WSL no pretende ser muy sofisticado).

Intentando agregar las instrucciones de github:

  • Genere claves de host SSH ejecutándolas sudo dpkg-reconfigure openssh-serveren un shell bash
  • Correr sudo nano /etc/ssh/sshd_config; edite la UsePrivilegeSeparation yeslínea para leer UsePrivilegeSeparation no. (Esto es necesario porque UsePrivilegeSeparationutiliza chroot()syscall, que WSL no admite actualmente).
  • Mientras sigues editando /etc/ssh/sshd_config, puedes elegir cambiar PasswordAuthentication noa PasswordAuthentication yes. De lo contrario, tendrás que configurar claves SSH.
  • Guardar /etc/ssh/sshd_configy Salir.
  • Ejecute sudo visudopara editar el archivo sudoers. Añade la línea

    $USER ALL = (root) NOPASSWD: /usr/sbin/sshd -D
    

    reemplazando "$USER" con su nombre de usuario de Linux. Guardar y Salir. Si visudo se queja de que sus cambios no son válidos, corríjalos hasta que informe que son válidos; ¡De lo contrario, puedes romper Sudo en tu sistema!

  • En el lado de Windows, edite el firewall de Windows (y cualquier firewall de terceros que pueda estar ejecutando) para permitir el tráfico entrante en el puerto 22. Debido a que esta no es una configuración súper segura, recomiendo permitir solo el tráfico entrante desde casa ( privadas) y redes de dominio, no de la Internet pública.
  • Cree un archivo de texto autostartssh.vbsen Windows que contenga lo siguiente:

    set ws=wscript.createobject("wscript.shell")
    ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
    
    • Haga doble clic en el guión. Debería comenzar sshd; Debería poder iniciar sesión mediante ssh en su máquina Windows.
    • Abra el Programador de tareas de Windows. Agregue una tarea que se ejecute autostartssh.vbsal iniciar el sistema. Úselo wscript.execomo comando para ejecutar y la ubicación del script VBS como parámetro.

Y eso es todo: ¡su computadora con Windows debería estar ejecutando un servidor OpenSSH de Linux!

Respuesta2

  1. Cree un archivo con el nombre wsl_setup.baty agregue contenido de la siguiente manera

    wsl -u root -e sudo service ssh start
    wsl -u root -e sudo service nginx start
    
  2. Agregar wsl_setup.batarchivo a la carpeta de inicio de Windowswindows-10-cambiar-aplicaciones-de-inicio

  3. Reinicie e inicie sesión en su cuenta de Windows (sí, debe iniciar sesión)

Respuesta3

He necesitado hacer lo mismo.

A continuación se explica cómo iniciar el subsistema Ubuntu Linux con todos los servicios de cron al iniciar Windows y proporcionar un medio para "reiniciar" el subsistema Linux.

Estoy alojando con éxito la base de datos openssh-server, nginx y mariadb en nuestro servidor.

Instalar el subsistema Linux

  • Abra Powershell como administrador
  • Pegar:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    
  • Instale Ubuntu desde la Tienda Windows.

Eliminar la solicitud de contraseña de sudo (obligatorio)

  • Abrir bash (el subsistema Linux lo instala)
  • Pegar:

    sudo sed -i "s/%sudo.*/%sudo ALL=(ALL:ALL) NOPASSWD:ALL/g" /etc/sudoers
    

Habilite el inicio de sesión con contraseña SSH (opcional)

  • fiesta abierta
  • Pegar:

    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
    

Inicio de sesión automático de Windows al inicio (obligatorio si tiene una contraseña o RDP)

  • Abrir netplwiz
  • Desmarque 'Los usuarios deben ingresar un nombre de usuario y contraseña...'
  • Abrir regedit como administrador
  • Navegar a

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
    
  • Cree una nueva cadena DefaultPasswordy escriba la contraseña del usuario como valor.

Ejecute el bucle bash/cron al inicio

  • Crea un archivo llamado linux.batenshell:startup
  • Pegar:

    C:\Windows\System32\bash.exe -c 'while [ true ]; do sudo /usr/sbin/cron -f; done'
    

Agregar aplicaciones/servicios para iniciar en cron

  • fiesta abierta
  • sudo crontab -e
  • Seleccione nano (o cualquier editor en el que sepa cómo guardar)
  • Agregue aplicaciones de inicio como 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
    
  • Guardar y salir: ctrlx, luego presione yy enter.

Reinicie el subsistema Linux sin reiniciar Windows

  • Abra bash o SSH en

    sudo service ssh restart
    
  • Esto cerrará la instancia actual y creará una nueva aplicando cron.

Extra: instale PHP 7.1 (no tan sencillo)

  • Ejecute los siguientes comandos para una configuración bastante estándar:

    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
    
  • Ejecute el siguiente comando para una configuración de 'OwnCloud':

    PHPV=7.1 && apt install --allow-unauthenticated -y php${PHPV}-redis redis-server php${PHPV}-ldap php${PHPV}-smbclient
    

Extra: instalar el servidor web nginx

  • Ejecute los siguientes comandos para una configuración básica con 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 - Instalar la base de datos mysql de mariadb

  • Ejecute los siguientes comandos para un servidor de base de datos 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
    
  • Cuando se le solicite, establezca una contraseña de usuario raíz de la base de datos.

Respuesta4

La respuesta de @poma es muy buena y en eso se basa mi respuesta. Sin embargo, quiero agregarle algunas mejoras:

  • Usarserviceen lugar de llamar sshddirectamente: 'sudo service ssh start'en lugar de 'sudo /usr/sbin/sshd -D'. De esa manera, incluso si llamas al script varias veces, solo habrá como máximo un sshdproceso. Además, es fácil eliminarlo con otro script que se ejecute 'sudo service ssh stop'. En el archivo sudoers, simplemente necesita reemplazarlo /usr/sbin/sshd -Dcon /usr/sbin/service.
  • Si ustedsonconfigurado para llamar sshddirectamente,deshacerse de la -Dopción, porque eso pondrá un proceso en primer plano indefinidamente. Si no me cree, hágalo topy verá initun sudoproceso cada vez que llame al script. ¡No olvides eliminar -Dtambién la opción en el archivo sudoers!
  • UsarPotencia Shellen lugar de vbs! Crea un archivo llamado autostartsshd.ps1y pega lo siguiente: bash -c 'sudo service ssh start'. Para ejecutar el script, haga clic derecho y haga clic en Run with PowerShell.

Otra pregunta de desbordamiento de pila tiene pasos similares:https://superuser.com/a/1114162/182590

Espero que ayude a alguien :)

información relacionada