问题背景
笔者在尝试使用ssh访问远程windows电脑的wsl,参照教程1,以及若干类似的教程,在设置好后,进行访问时都出现了同样的问题:
kex_exchange_identification: read: Connection reset
笔者尝试过重置WSL,重置windows的openssh服务,以及尝试了不论中文还是英文范围的主流资料,都没有解决问题。
解决方案
笔者在windows中进行设置下面这个时,当时为了图方便,将listenport和connectport设置成一样的,比如都设置成2222。当时笔者认为,一个是windows的监听端口,一个是wsl的端口,设置成一样的不会冲突。并且设置成功后,当时确实没有出现问题,也就不再注意这件事。(甚至在别的电脑进行相同配置也都没有出现问题,但实际上这里是有隐患的)
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=[IP] connectport=[PORT]
可是之后安装了另一个WSL,并设置远程访问时出现 了问题,两个wsl都无法远程访问了!甚至即便是在WSL中也无法使用ssh访问自身。
ssh username@localhost -p 2222 # 在wsl中执行该命令也不行
笔者想到了上面提到的可能的冲突,在将listenport和connectport设置成两个端口时,便神奇的解决了问题。
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=[IP] connectport=2223
这里的connectport对应wsl的端口,也就是在 /etc/ssh/sshd_config 设置的那个:
Port 2223 # 这个
#AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::