保持SSH在Windows 10 Bash上运行

问题描述 投票:8回答:3

我在使用Windows子系统Linux上运行SSH时遇到问题。似乎如果shell没有打开并运行bash,子系统中的所有进程都将被终止。有办法阻止这个吗?

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

linux windows bash ssh windows-subsystem-for-linux
3个回答
12
投票

您必须保持至少一个bash控制台处于打开状态才能使后台任务继续运行:只要关闭上一个打开的bash控制台,WSL就会删除所有正在运行的进程。

是的,我们正在努力改善这种情况;)

更新2018-02-06

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

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


2
投票

为了维护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'来定义带有@reboot的cron作业,以便在登录时启动。


0
投票

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

我修改了/etc/rc.local:

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

我需要为sshd添加目录,否则我会收到错误“Missing privilege separation directory / var / run / sshd我注释掉了cron,因为我遇到了类似的错误,没有时间或者还没有修复它。

我还更改了sudoers条目以使它们工作:

username ALL = ....

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

© www.soinside.com 2019 - 2024. All rights reserved.