【问题标题】:Keep SSH running on Windows 10 Bash保持 SSH 在 Windows 10 Bash 上运行
【发布时间】:2017-06-27 18:59:09
【问题描述】:

我在保持 SSH 在 Linux 的 Windows 子系统上运行时遇到问题。似乎如果没有打开外壳并运行 bash,则子系统中的所有进程都会被杀死。有没有办法阻止这种情况?

我尝试使用 nssm 创建服务,但无法使其正常工作。现在我正在尝试启动一个 shell,然后将其发送到后台,但我还没有完全弄清楚如何。

【问题讨论】:

    标签: linux windows bash ssh windows-subsystem-for-linux


    【解决方案1】:

    今天早些时候刚刚通读了这个帖子,并使用它来运行 sshd,而无需打开 wsl 控制台。 我在 Windows 10 版本 1803 上并在 WSL 中使用 Ubuntu 16.04.5 LTS。 我需要进行一些更改才能使其正常工作。非常感谢谷歌搜索和这样的社区。​​p>

    我修改 /etc/rc.local 如下:

    mkdir /var/run/sshd
    /usr/sbin/sshd
    #/usr/sbin/cron
    

    我需要为 sshd 添加目录,否则我会收到错误“缺少权限分离目录 /var/run/sshd 我将 cron 注释掉了,因为我遇到了类似的错误并且没有时间或需要修复它。

    我还稍微更改了 sudoers 条目以使其正常工作:

    username ALL = ....
    

    希望这对某人有用。 约翰·巴特勒

    【讨论】:

      【解决方案2】:

      您必须至少打开一个 bash 控制台才能让后台任务继续运行:一旦您关闭最后一个打开的 bash 控制台,WSL 就会关闭所有正在运行的进程。

      而且,是的,我们正在努力在未来改进这种情况;)

      2018-02-06 更新

      在最近的 Windows 10 Insider 版本中,我们添加了keep daemons and services running in the background 的功能,即使您关闭了所有 Linux 控制台!

      此方案的一个剩余限制是您必须手动启动服务(例如 Ubuntu 中的 $ sudo service ssh start),尽管我们正在研究如何允许您配置哪些守护程序/服务在何时自动启动你登录到你的机器。后续更新。

      【讨论】:

      • 嘿@rich-turner,这个场景有什么改进吗?
      • 感谢您的提问……为我的回答添加了更新:)
      • 这对cron这样的东西有潜力吗?
      • 有点……虽然我们还没有(还)在登录时自动启动守护进程,所以不太可能有用。 Windows 上更好的选择是运行计划任务
      【解决方案3】:

      为了维护 WSL 进程,我将此文件放在 C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\wsl.vbs 中

      set ws=wscript.createobject("wscript.shell")
      ws.run "C:\Windows\System32\bash.exe -c 'sudo /etc/rc.local'",0
      

      在 /etc/rc.local 中,我启动了一些服务,最后“休眠”以保持整个运行:

      /usr/sbin/sshd
      /usr/sbin/cron
      #block on this line to keep WSL running
      sleep 365d
      

      在 /etc/sudoers.d 我添加了一个 'rc-local' 文件以允许上述命令没有 sudo 密码提示:

      username * = (root) NOPASSWD: /etc/rc.local
      username * = (root) NOPASSWD: /usr/sbin/cron
      username * = (root) NOPASSWD: /usr/sbin/sshd
      

      这在 1607 上运行良好,但在更新到 1704 后,我无法再通过 ssh 连接到 wsl。

      一旦你运行了 cron,你可以使用 'sudo crontab -e -u username' 来定义 cron 作业,并使用 @reboot 在登录时启动。

      【讨论】:

        猜你喜欢
        • 2021-07-25
        • 2017-01-14
        • 2021-09-04
        • 1970-01-01
        • 2013-08-26
        • 2021-10-22
        • 1970-01-01
        • 2020-05-19
        • 2018-09-04
        相关资源
        最近更新 更多