wsl---ssh远程连接、ip映射及服务自启详细配置

简介: 在初步体验了wsl后,我们都想通过一些类似xshell的工具来进行连接,因为cmd真的是不太友好。在多次反复操作后发现,网上很多千篇一律的教程在有些地方,真的是误导像我这种小白,因此,本片文章经历过多次修改以保让我等小白不被带偏。

开篇



我们都知道,wsl安装完成后,通过命令行输入wsl即可进入系统,但是Windows cmd窗口真的不太友好,那么,我们有没有办法通过xshell等sshclient工具来进行连接进行操作呢?那么,本篇我们一起来学习一下吧。

那么,这里我们一般有2种方式来建立ssh连接。


ssh client连接


(一)生成密匙

这里需要注意的是,如果wsl不存在ssh服务,则直接跳到第二种方式进行操作,如果存在,建议先执行该种方式进行体验,若不成功,则再跳到第二种方式将会更明白个中道理。

一般wsl自带ssh服务,首先我们启动服务


service ssh restart

此时可能报错


sshd: no hostkeys available -- exiting.

这里可能有2种原因,一是当前用户非root用户,此时切换到root用户执行即可,二是可能缺少密匙文件,可进入/etc/ssh查看是否存在下图中2个文件,若不存在,执行以下命令生成即可。

$ sudo ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
$ sudo ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key


服务启动成功后,通过命令行以下方式进行连接

ssh jack@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
RSA key fingerprint is SHA256:IE0uKLebsAS9/FbuQEHq8sCkauJUwkj0hDlpAhtn0C0.
Are you sure you want to continue connecting (yes/no/[fingerprint])?


即可登录,但这里是使用密匙登录,要想通过账号密码登录,则需要修改配置文件。

修改完配置文件后,通过

ssh jack@172.21.73.52
jack@172.21.73.52's password:


输入密码即可登录。(修改方法见二中的允许用户名密码登录)

这里需要注意的是,这里既可以通过local host也可以通过ip来进行访问,并不像其他教程里所说的一样需要进行端口转发,端口转发并不是用在这种情况下的,后面会讲解。


(二)删除并重新安装sshopen-server

这种方法网上随处可见,为了全面,我这里也记录一下,基本上分为以下几步。

1.卸载openssh-server


apt remove openssh-server

2.安装openssh-server


apt install openssh-server


3.修改配置文件

# 编辑/etc/ssh/sshd_config文件。
vi /etc/ssh/sshd_config


  • 修改ip和port

       

  • 修改允许root访问

       

  • 修改允许用户名密码登录

     

4.重启


sudo service ssh restart

此时即可通过ssh进行连接或通过xshell等工具进行连接



WSL IP映射


(一)完成以上连接后,是否可以通过其他电脑来访问wsl?

毫无疑问是可以的!!!那么这步我们就需要配置防火墙出入站规则以及端口转发规则了

如果防火墙开启,那我们需要配置防火墙规则同时需要配置端口转发规则

1.配置端口转发规则

意思就是,访问到物理机的2222端口的请求,转发到wsl的2222端口,IP为wsl的ip


netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=[IP] connectport=[PORT]

2.配置防火墙出入站规则

这是安全规则,如果防火墙关闭的话则不用配置,


netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=2222

配置完以上两步后,我们则可以通过局域网来访问我们的wsl

(例如,本机ip是1.2.3.4,wsl地址是172.16.12.1)

那么,远程访问时,通过


ssh jack@1.2.3.4 -p 2222

即可连接到wsl。


如果想要通过外网进行连接,那么需要将本机的相应端口(这里是2222)映射到外网,因为一般我们的电脑在局域网内。

网上说,要连接到wsl时,wsl必须保持打开状态,也就是命令行窗口不能关闭,其实这是一个误区!!!

经过验证,即使所有的命令行都关闭,只要wsl不是shutdown状态,ssh服务正常开启,那么就可以通过ssh进行连接!!!

其实,通过这一步可以自由的配置本地端口与wsl端口的映射,也就是可以通过物理机来进行网站或应用程序的访问,比如,我们在wsl部署一个网站,我们可以直接将该网站的端口xxxx映射到物理机的8080(举例),那么我们通过本机ip:8080即可访问该网站,大大提高我们的易操作性。

但是不是到这里就万事大吉了呢?并不是,因为wsl每次重启,ip地址都会变化,也就是说通过以上步骤添加的映射规则在wsl重启后就失效了!【刚开始不知道,第一次配置好wsl后,第二天来开机就懵逼了,一通瞎操作才整明白】,所以,我们还得想办法来固定wsl的ip地址,以保证规则永久有效。


(二)固定wsl ip地址

其实这种说法并不准确,因为严格意义上,固定wsl ip实现相当复杂,我们一般都是通过变相的操作来达到相同的目的。

这个方法就是,wsl启动时,读取ip并将ip以及域名写入到Windows的hosts文件中,这样一来,我们映射规则中的IP就可以用域名来代替。

说干就干,我们来看一下具体步骤。

这里一种方法是,再wsl启动后,给他分配一个与机器同网段的ip,参考

https://blog.csdn.net/manbu_cy/article/details/108476859

另一种则是动态获取wslIP并写入hosts文件,这里主要说第二种

1.首先,下载wsl2host.exe ,地址

https://github.com/shayne/go-wsl2-host/releases

这里附上我下载后上传的地址,因为GitHub实在太慢了。

https://wwa.lanzoui.com/iZaIJp49rxi

2.管理员运行cmd,然后切换到wsl2host.exe目录下,执行

>wsl2host.exe install
Windows Username: xxx
Windows Password:xxx


若不报错,则证明安装成功,打开服务,查找wsl2host查看状态,若为停止,手动启动

若启动失败,则打开本地组策略,进行如下设置

此时即可启动服务成功,打开

C:\Windows\System32\drivers\etc\hosts,可以查看到

证明添加成功,之后,我们就再也不用担心wsl重启导致的IP变动问题了。

如果是家庭版win10,那么可以

@echo off
pushd "%~dp0"
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >List.txt
dir /b C:\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>List.txt
for /f %%i in ('findstr /i . List.txt 2^>nul') do dism /online /norestart /add-package:"C:\Windows\servicing\Packages\%%i"
pause


复制以上内容到一个文本***.bat中,使用管理员运行即可。

经测试,当wsl --shutdown时,hosts文件中wsl域名行会消失,当wsl启动时,会自动添加。


wsl服务自启动



(一)ssh自启动设置

其实还有一个问题,就是ssh自启动的问题(其他服务类似),因为每次wsl重启后都要手动启动ssh,导致很多不便,我们这里也说一下。

看过网上的很多教程,都是老教程而且还不易操作,这里给出我总结的简易方法,请参考

https://blog.csdn.net/xiansenLee/article/details/116954309

相关文章
|
8月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
444 146
|
Shell 网络安全 C#
一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
一款 .NET 开源、功能强大的远程连接管理工具,支持 RDP、VNC、SSH 等多种主流协议!
498 4
|
9月前
|
网络安全 开发工具 git
配置本地环境以管理Git多账户SSH连接的方法
通过以上步駟设置后, 您可以轻松管理多個 Git 账户并且根据不同项目需求切换 SSH 密匙进行版本控制操作。
1103 20
|
9月前
|
Ubuntu 网络安全 数据安全/隐私保护
搭建SSH服务于RK3399平台上的Ubuntu 18.04,实现远程连接
以上步骤涵盖从安 装 到配制再至实际使 用户建立Ssh 连接所需知识点 。务必注意,在对外提供Ssh 访问
431 2
|
12月前
|
应用服务中间件 网络安全 数据安全/隐私保护
网关服务器配置指南:实现自动DHCP地址分配、HTTP服务和SSH无密码登录。
哇哈哈,道具都准备好了,咱们的魔术秀就要开始了。现在,你的网关服务器已经魔法满满,自动分配IP,提供网页服务,SSH登录如入无人之境。而整个世界,只会知道效果,不会知道是你在幕后操控一切。这就是真正的数字世界魔法师,随手拈来,手到擒来。
556 14
|
Ubuntu Linux 网络安全
在Linux云服务器上限制特定IP进行SSH远程连接的设置
温馨提示,修改iptables规则时要格外小心,否则可能导致无法远程访问你的服务器。最好在掌握足够技术知识和理解清楚操作含义之后再进行。另外,在已经配置了防火墙的情况下,例如ufw(Ubuntu Firewall)或firewalld,需要按照相应的防火墙的规则来设置。
665 24
|
11月前
|
网络安全 开发工具 git
GitHub 多账户 SSH 配置指南
本文介绍了如何在同一台电脑上配置多个 GitHub 账户的 SSH 密钥。内容包括:检查现有密钥、生成新的 SSH 密钥、配置 SSH config 文件、将公钥添加到 GitHub、验证 SSH 连接、设置 Git 用户信息、创建工作区目录、使用不同账户克隆仓库,以及为每个仓库配置独立的用户信息等步骤。通过这些操作,可以实现在不同项目中使用不同的 GitHub 账户进行提交和管理。
799 0
|
安全 Linux 网络安全
在Linux(CentOS和AWS)上安装更新的git2的方法并配置github-ssh
经过以上这些步骤,你现在就能在GitHub上顺利往返,如同海洋中的航海者自由驰骋。欢迎你加入码农的世界,享受这编程的乐趣吧!
571 10
|
Java 网络安全 数据安全/隐私保护
主流SSH远程连接客户端——MobarXterm安装教程
本文介绍了从FinalShell转向MobarXterm的原因及使用体验,详细对比了当前主流SSH客户端,推荐使用MobarXterm。文章还提供了MobarXterm的安装步骤、基本配置方法,包括设置默认编辑器、配置右键粘贴、SSH配置、关闭X-Server服务以及SFTP文件传输功能的使用。
1663 1
主流SSH远程连接客户端——MobarXterm安装教程
|
运维 网络安全
解决ssh: connect to host IP port 22: Connection timed out报错(scp传文件指定端口)
通过这些步骤和方法,您可以有效解决“ssh: connect to host IP port 22: Connection timed out”问题,并顺利使用 `scp`命令传输文件。
15853 7