Como rodar o serviço Ubuntu no Windows (na inicialização)?

18

Eu quero iniciar um servidor SSH no subsistema Linux (Bash no Ubuntu no Windows) na inicialização do Windows. O problema é que todos os processos do Linux são finalizados quando a janela Bash é fechada.

Existe uma maneira de fazer com que o processo Linux seja executado permanentemente em segundo plano sem a janela do bash?

    
por Poma 10.08.2016 / 15:10

3 respostas

21

Encontrou um tutorial para isso por meio de:

Isso foi originalmente discutido e resolvido pelos usuários do github imjakey, fpqc, qris, therealkenc, Manouchehri e aseering (eu) aqui:

link

Observe que executar o sshd tem implicações de segurança. Até que o modelo de segurança da WSL tenha mais tempo para assar, você deve assumir que qualquer pessoa que possa fazer ssh em sua caixa do Windows tem permissão para executar qualquer comando como o usuário do Windows que está executando o sshd, independentemente das permissões no nível do Linux. (As permissões são provavelmente mais restritivas do que na prática, mas o modelo de segurança inicial da WSL não pretende ser muito sofisticado.)

Tentativa de agregar as instruções do github:

  • Gerar chaves de host SSH executando sudo dpkg-reconfigure openssh-server em um bash shell
  • Executar sudo nano /etc/ssh/sshd_config ; edite a linha UsePrivilegeSeparation yes para ler %código%. (Isso é necessário porque UsePrivilegeSeparation no usa o UsePrivilegeSeparation syscall, que WSL atualmente não suporta.)
  • Enquanto continua editando chroot() , você pode optar por alterar /etc/ssh/sshd_config to PasswordAuthentication no . Caso contrário, você terá que configurar as chaves SSH.
  • Salvar PasswordAuthentication yes e sair.
  • Execute /etc/ssh/sshd_config para editar o arquivo sudoers. Adicione a linha

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

    substituindo "$ USER" pelo seu nome de usuário do Linux. Salve  e sair. Se visudo reclamar que suas alterações são inválidas, corrija-as até que relate que eles são válidos; senão você pode quebrar o sudo Seu sistema!

  • No lado do Windows, edite o firewall do Windows (e qualquer firewalls de terceiros que você pode estar executando) para permitir tráfego na porta 22. Porque esta não é uma configuração super-segura, eu recomende somente permitir tráfego de entrada de casa (particular) e redes de domínio, não da Internet pública.
  • Crie um arquivo de texto sudo visudo no Windows contendo o seguinte:

    set ws=wscript.createobject("wscript.shell")
    ws.run "C:\Windows\System32\bash.exe -c 'sudo /usr/sbin/sshd -D'",0
    
    • Clique duas vezes no script. Deve começar o sshd; você deve poder usar ssh em sua máquina Windows.
    • Abra o Agendador de Tarefas do Windows. Adicione uma tarefa que execute autostartssh.vbs na inicialização do sistema. Use autostartssh.vbs como o comando para executar e o local do script VBS como o parâmetro.

E é isso - o seu computador Windows deve estar executando um servidor openssh do Linux!

    
por 10.08.2016 / 15:39
2

Eu precisava fazer o mesmo.

Veja como inicializar o subsistema Ubuntu Linux com todos os serviços do cron na inicialização do Windows & fornecer um meio para 'reiniciar' o subsistema Linux.

Estou hospedando com sucesso o openssh-server, nginx & banco de dados mariadb em nosso servidor.

Instalar o subsistema Linux

  • Abra o Powershell como administrador
  • Colar:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    
  • Instale o Ubuntu da Windows Store.

Remover o prompt de senha do sudo (obrigatório)

  • Abrir bash (o subsistema Linux instala isso)
  • Colar:

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

Ativar login de senha SSH (opcional)

  • Abrir a bash
  • Colar:

    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
    

Autologagem do Windows no início (necessário se você tiver uma senha ou entrada RDP)

  • Abrir o netplwiz
  • Desmarcar 'Os usuários devem digitar um nome de usuário e senha ...'
  • Abra o regedit como administrador
  • Navegue para

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
    
  • Crie uma nova string DefaultPassword e escreva a senha do usuário como valor.

Executar o loop bash / cron no início

  • Crie um arquivo chamado linux.bat in shell:startup
  • Colar:

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

Adicionar aplicativos / serviços para inicialização no cron

  • Abrir a bash
  • sudo crontab -e
  • Selecione nano (ou qualquer editor que você saiba como salvar)
  • Anexar aplicativos de inicialização, 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
    
  • Salve e saia: ctrl x , depois pressione y e entre .

Reinicialize o subsistema Linux sem reiniciar o Windows

  • Abra o bash ou o SSH em

    sudo service ssh restart
    
  • Isso fechará a instância atual e criará uma nova usando o cron.

Extra - Instale o PHP 7.1 (não tão simples)

  • Execute os comandos abaixo para uma configuração padrão:

    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
    
  • Execute o comando abaixo para uma configuração 'OwnCloud':

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

Extra - Instale o servidor web nginx

  • Execute os comandos abaixo para uma configuração básica com o 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 - Instala o banco de dados mysql do mariadb

  • Execute os comandos abaixo para um servidor de banco de dados 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
    
  • Quando solicitado, defina uma senha de usuário do banco de dados raiz.

por 28.02.2018 / 05:43
0

A resposta do @poma é muito boa e é a base da minha resposta. No entanto, quero adicionar algumas melhorias:

  • Use service em vez de chamar sshd diretamente: 'sudo service ssh start' em vez de 'sudo /usr/sbin/sshd -D' . Dessa forma, mesmo que você chame o script várias vezes, haverá apenas no máximo um processo sshd . Além disso, é fácil eliminá-lo com outro script que executa 'sudo service ssh stop' . No arquivo sudoers, basta substituir /usr/sbin/sshd -D por /usr/sbin/service .
  • Se você estiver definido ao chamar sshd diretamente, elimine a opção -D , porque isso colocará um processo em primeiro plano indefinidamente. Se você não acredita em mim, basta fazer top e verá um processo init e sudo para cada vez que chamou o script. Não se esqueça de remover a opção -D no arquivo sudoers também!
  • Use PowerShell em vez de vbs! Crie um arquivo chamado autostartsshd.ps1 e cole o seguinte: bash -c 'sudo service ssh start' . Para executar o script, clique com o botão direito e clique em Run with PowerShell .

Outra questão de estouro de pilha tem etapas semelhantes: link

Espero que ajude alguém:)

    
por 25.05.2018 / 08:19