设置

设置

设置

  • Banana Pi m2U 运行 raspbian,(uname -r给出“3.10.108-BPI-M2U-Kernel”)
  • 在上述 bPi 上运行的 ssh 服务器(附有下面的 ssh 配置),监听端口 22,仅允许使用少数选定密钥进行公钥身份验证
  • 运行 wsl2 的 Windows 10 笔记本电脑Ubuntu 21.10(并且 uname 给出5.10.16.3-microsoft-standard-WSL2
  • ISP 提供的路由器,bPi 的 22 端口转发到外部端口 2222
  • duckdns 动态 dns,由 bPi 上的程序更新(据我所知,也执行 ipv4 和 ipv6)

什么有效/无效

我尝试过以下场景来连接到bPi:

  • 从我的 WSL 实例连接到 bPi 的本地 ip 和端口 22 即可。
  • 从我的 WSL 实例连接到路由器的公共 IP 或动态 DNS 和端口 2222不起作用,具体细节如下
  • 从我的 Windows 实例(使用 powershell 或 putty 中的 ssh 命令)连接到公共 IP 或动态 DNS 地址和端口 2222不工作(挂起/超时)
  • 从我的 Windows 实例(使用 powershell 或 putty 中的 ssh 命令)连接到本地 ip 和端口 22 确实有效
  • 从我朋友的本地 Ubuntu 安装连接到公共 IP 或动态 DNS 和端口 2222 是可行的。
  • 从 bPi 连接到公共 IP 或主机名和端口 2222 也是可行的。

目标

目标显然是能够从我的电脑连接到 bPi 的公共主机名/端口,以便我可以从家庭网络之外访问它。

过去的

重要提示:所有方案(包括不起作用的方案)都有之前已经工作过,但由于某种原因,其中一些在一段时间前(不到两个月)停止工作。我不确定是否有任何更新,但这肯定是可能的。

疑似原因

最后两种情况表明问题不在于路由器或 rPi,而在于我的电脑在 windows10 上设置的 WSL2。

确切的错误详细信息

ssh -v -v -v -p 2222 pi@hostname在 powershell 或 wsl 上运行时,我得到一个正常的日志debug1: SSH2_MSG_KEXINIT sent,直到它挂起一段时间,然后退出debug3: recv - from CB ERROR:10060, io:00000229C830EF10 \ ssh_dispatch_run_fatal: Connection to <IP> port 2222: Connection timed out

搜索/找到答案

我已经尝试搜索“debug1:SSH2_MSG_KEXINIT 已发送”和“ssh 仅在本地工作”,但没有找到任何可行的解决方案。

大多数答案都是修复问题,防止任何随时随地进行连接。

其中一个反复出现的主题是错误的 MTU 设置。我确实尝试将 WSL 中的客户端 MTU(不确定 Windows 是否支持)降低到 1000 或以下,但这根本没有帮助。我无法在 bPi 上设置 mtu,因为它报告“设备或资源繁忙”,但由于它已经与其他设备一起工作,我认为问题不在于 bPi 或路由器。

额外细节

附加 ssh 设置(/etc/ssh/sshd_config):

#       $OpenBSD: sshd_config,v 1.100 2016/08/15 12:32:04 naddy Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
AddressFamily any
ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PubkeyAuthentication yes

# Expect .ssh/authorized_keys2 to be disregarded by default in future.
#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no
#PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM no

#AllowAgentForwarding yes
AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
PrintMotd no
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
#UsePrivilegeSeparation sandbox
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
PermitTunnel yes
#ChrootDirectory none
#VersionAddendum none

# no default banner path
#Banner none

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

# override default of no subsystems
Subsystem       sftp    /usr/lib/openssh/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

如果需要,我还可以使用 wireshark 捕获数据包。

相关内容