当前位置: 首页>>技术教程>>正文


如何在Windows上(启动时)运行Ubuntu服务?

问题描述

我想在Windows启动时在Linux子系统(Windows上的Ubuntu上的Bash)上启动SSH服务器。问题是当关闭Bash窗口时,所有Linux进程都会终止。

有没有一种方法可以使Linux进程在没有bash窗口的情况下在后台永久运行?

最佳方法

通过咨询找到了一个有关此的教程:

最初由github用户imjakey,fpqc,qris,therealkenc,Manouchehri和aseering(myself)在这里讨论并整理:

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

请注意,运行sshd具有安全隐患。在WSL的安全模型需要更长时间之前,您应该假定可以ssh进入Windows框的任何人都具有以运行sshd的Windows用户身份执行任何命令的权限,而不管Linux-level权限如何。 (权限可能比实践中的限制更严格,但是WSL的初始安全模型并不是很复杂。)

尝试汇总来自github的指令:

  • 通过在bash shell中运行sudo dpkg-reconfigure
    openssh-server
    生成SSH主机密钥

  • 运行sudo nano /etc/ssh/sshd_config;编辑UsePrivilegeSeparation yes行以读取UsePrivilegeSeparation no。 (这是必需的,因为UsePrivilegeSeparation使用WSL当前不支持的chroot()系统调用。)

  • 仍在编辑/etc/ssh/sshd_config时,您可以选择将PasswordAuthentication no更改为PasswordAuthentication yes。否则,您将必须设置SSH密钥。

  • 保存/etc/ssh/sshd_config并退出。

  • 运行sudo visudo以编辑sudoers文件。添加行

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

    用您的Linux用户名替换”$USER”。保存并退出。如果visudo抱怨您的更改无效,请对其进行修复,直到其报告有效为止;否则,请执行以下操作。否则,您可以在系统上破坏sudo!

  • 在Windows上,编辑Windows防火墙(以及您可能正在运行的任何第三方防火墙)以允许端口22上的传入通信。由于这不是super-secure设置,因此我建议仅允许来自家庭(私有)的传入通信。和域网络,而不是来自公共Internet。

  • 在Windows中创建一个包含以下内容的文本文件autostartssh.vbsset 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服务器!

次佳方法

  1. 创建一个名为wsl_setup.bat的文件,并添加如下内容

    wsl -u root -e sudo service ssh start
    wsl -u root -e sudo service nginx start
    
  2. wsl_setup.bat文件添加到Windows启动文件夹windows-10-change-startup-apps

  3. 重新启动并登录您的Windows帐户(是的,您需要登录)

第三种方法

我需要做同样的事情。

以下是在Windows启动和启动时使用cron的所有服务启动Ubuntu Linux子系统的方法。为Linux子系统’reboot’提供一种方法。

我已经成功托管了openssh-server,nginx&我们服务器上的mariadb数据库。

安装Linux子系统

  • 以管理员身份打开Powershell

  • 糊:

    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
    
  • 从Windows Store安装Ubuntu。

删除sudo密码提示(必填)

  • Open bash(Linux子系统安装此程序)

  • 糊:

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

启用S​​SH密码登录(可选)

  • 公开重击

  • 糊:

    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,则必须输入)

  • 打开netplwiz

  • 取消选中“用户必须输入用户名和密码…”

  • 以管理员身份打开regedit

  • 浏览到

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon
    
  • 创建一个新的字符串DefaultPassword并将用户密码写​​为value。

在启动时运行bash /cron循环

  • shell:startup中创建一个名为linux.bat的文件

  • 糊:

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

将应用程序/服务添加到cron上启动

  • 公开重击

  • sudo crontab -e

  • 选择nano(或任何您知道如何保存的编辑器)

  • 附加启动应用程序,例如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
    
  • 保存并退出:ctrl x,然后按yenter

在不重新启动Windows的情况下重新启动Linux子系统

  • 在以下位置打开bash或SSH

    sudo service ssh restart
    
  • 这将关闭当前实例并创建一个新的应用cron。

额外-安装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
    

额外-安装Nginx Web服务器

  • 运行以下命令以使用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
    

额外-安装mariadb的mysql数据库

  • 对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
    
  • 出现提示时,设置根数据库用户密码。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/11536.html,未经允许,请勿转载。