写在前面:本博客仅作记录学习之用,部分图片来自网络,如需引用请注明出处,同时如有侵犯您的权益,请联系删除!
文章目录
- 前言
- 常见问题
- 影响SSH的因素
- 本地影响因素
- 防火墙设置
- 网络配置文件
- 远程主机影响因素
- 放行SSH端口/端口故障
- 开启SSH服务
- 服务器故障
- 总结
- 致谢
- 参考
前言
题外话1: 都一月底了,各位小伙伴都放假回家了没?
随着远程办公的普及,数字化转型成为企业/个人必须面对的课题,可以帮助企业/个人实现更高效、更灵活、更快速的产出。通常企业/学校都有内部的计算机网络,为内部人员提供一个实践的环境和资源。
但是一旦脱离内部的局域网,资源的访问就会存在限制,但一般回家之后如果临时访问资源该如何实现?
咦~,你这都不会?
- 远程桌面控制:允许用户在不同的地理位置通过互联网访问远程主机资源,如向日葵等,但是该方法需要远程主机安装软件并时刻能连接互联网。
- 动态端口映射:对远程主机的端口绑定到公网上,实现外网与内网的通信,如花生壳net123,但是该方法需要远程主机时刻能连接互联网。
- 虚拟专用网络(VPN):在公用网络上建立专用网络,进行加密通讯,创建一个私密的网络环境,但是需要内网提供VPN的服务。
综合来看,如需直接操作远程电脑,网络带宽和稳定性较好的前提下,可以选择远程桌面控制;如果需要远程访问内网中的资源,可以选择动态端口映射或虚拟专用网络(VPN)。
相对来说,动态端口映射和VPN更为常用和方便。
对于只需要跑跑程序或操作无桌面的远程主机的情况下,一般使用VPN更为方便,几年疫情的磨练,多数企业/学校均有特色的连接方式。
但是远程连接VPN可能存在些问题,导致无法成功连接,因此在本文中,将详细介绍SSH连接远程失败的问题和解决步骤,通过这些信息,希望帮助小伙伴更好地解决VPN连接的问题,以便在必要时能够有效地进行居家学习/办公。
常见问题
一般需要使用VPN软件进行连接,然后进行SSH连接,发现无法连接,如下:
此时,进一步的使用Ping发现可以Ping通,如下:
这个时候应该考虑什么因素呢?
先要了解Ping和SSH的关系。Ping和SSH是两个在网络上广泛使用的工具,但它们有着明显的不同。
- Ping : 用于测试网络连接的命令,它通过发送ICMP回应请求来检测与目标主机之间的连接状态, 目标主机在线并且可以响应,用户将收到一个回应,表明网络连接正常。
- SSH : 一种安全协议,用于远程登录到另一台计算机。通过SSH,用户可以在远程计算机上执行命令,就像直接在本地计算机上执行一样。
总的来说,Ping主要用于测试网络连接,而SSH则用于远程登录和执行命令,因此Ping通是SSH连接成功的前提,如果网络连接不可达,那SSH是无意义的。因此Ping通后只需考虑SSH相关的因素即可。
影响SSH的因素
因此后续只需考虑SSH相关的因素,大致分为本地因素和远程主机因素。
本地影响因素
本地影响因素主要是防火墙可能会阻止SSH连接,以及网络配置问题。但是Ping通意味着DNS、子网掩码等基本没有问题,因此基本可以考虑以下内容:防火墙以及对应网络配置文件。
防火墙设置
防火墙主要查看关于VPN以及SSH连接软件是否允许操作,如下图,如对应的对象不被允许,需要更改权限以允许访问。
网络配置文件
现在无论是公开场所还是居家几乎都实现了WiFi覆盖,在没有以太网的情况下,WiFi成为了不二选择。通常WiFi连接成功都会提示是否为专用网络还是公共网络以赋予对应的权限。如下图,如果是专用网络意味着信任该网络,权限基本上都赋予了;但是如果是公用网络类型,则不让其他设备无法识别该电脑,此时SSH可能会失败。因此建议使用专用网络。
此外也可以进行网络的防火墙和安全设置,对其进行进一步设置,比如传入连接之类的,如下图:
远程主机影响因素
放行SSH端口/端口故障
SSH默认是22端口,如果在局域网成功连接过,那意味着该主机的SSH服务和端口都是OK的。如果使用的是云服务器,此处以阿里云为例,阿里云对于云服务器需要配置安全组进行人为的端口放行,如下图:
同样的百度云、腾讯云服务器也是类似的,否则对应的端口无法与本地建立连接。
此外,由于各种因素,如端口被占用/封闭,此时连接是无法畅通。我们需要做的就是检查端口是否有被封,然后通过更换SSH端口来解决,大致的步骤如下:
-
打开命令提示符或终端,并使用管理员权限登录到系统。
-
备份原始的SSH配置文件,在命令提示符或终端窗口中输入以下命令将备份原始的SSH配置文件到sshd_config.bak文件,使得后续可以复原:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
-
使用文本编辑器打开SSH配置文件/etc/ssh/sshd_config。在命令提示符或终端窗口中输入以下命令:
sudo vi /etc/ssh/sshd_config
-
在配置文件中找到该行:
#Port 22
,将其修改为所需的端口号,例如:Port 1234
Note: 确保选择的端口号没有被其他服务使用,并且是大于1024的非保留端口。 -
保存更改并关闭文件。在Vi编辑器中,按下Esc键,然后输入:wq保存并退出。
-
重启SSH服务以使更改生效。在命令提示符或终端窗口中输入以下命令:
sudo systemctl restart sshd
-
防火墙中放行新端口以确保可以正常连接到SSH服务,使用下列命令:
sudo firewall-cmd --zone=public --add-port=1234/tcp --permanent
-
重载防火墙,使放行端口生效:
sudo firewall-cmd --reload
-
测试SSH连接是否正常。使用SSH客户端尝试连接到新的端口号,例如:
ssh username@localhost -p 2222
,如果一切正常,您将能够成功连接到SSH服务器。
注意,修改SSH默认端口可能会影响系统的安全性。确保选择一个安全的端口号,并采取其他安全措施来保护系统,例如使用强密码、禁用root登录等。
开启SSH服务
以下是在Linux系统上开启SSH服务的通用步骤:
-
安装SSH服务器软件包。在终端中输入以下命令:
sudo apt-get install openssh-server
-
启动SSH服务,允许其他计算机通过SSH协议连接到该Linux系统。在终端中输入以下命令:
sudo systemctl start ssh
-
设置SSH服务为开机自启动。在终端中输入以下命令:
sudo systemctl enable ssh
-
防火墙设置。启用防火墙后,需要确保允许SSH流量通过。具体防火墙设置方式因系统而异,但通常需要打开SSH相关的端口(默认为22端口)。
-
测试SSH服务是否正常。在终端中输入以下命令:
sudo ps -e | grep ssh
如果看到sshd进程,则表示SSH服务已经启动。如果没有启动,请使用上述命令再次启动SSH服务。 -
使用SSH客户端连接。使用SSH客户端从其他设备连接到该系统并进行远程管理和文件传输。例如,在终端中输入以下命令:
ssh username@your_server_ip_address
如果一切正常,将成功连接到SSH服务并开始远程管理。
注意,以上步骤仅适用于基于Debian和Ubuntu的Linux发行版。
服务器故障
网络连接问题: 如果网络连接存在问题,如网络延迟、丢包等,也会导致SSH连接失败。
SSH服务出现故障: 如果SSH服务本身出现故障,如程序崩溃等,则SSH连接也会失败
此时,可重启服务器,因为重启基本上能够解决80%问题;重启无效可以重启SSH服务或检查网卡驱动、以及检查硬件是否损坏,如网线故障等。
总结
本文主要从Ping与SSH的关系进行说明,进一步的以本地和远程服务器无法SSH连接的原因进行说明与解决。具体来说:
- Ping通是SSH连接成功的前提
- 本地影响因素:主要是防火墙可能会阻止SSH连接,以及网络配置问题。
- 远程主机影响因素:放行SSH端口/端口故障、开启SSH服务、 服务器故障。
完成以上因素检查后,SSH应该可以正常工作,希望这些信息能够帮助小伙伴顺利解决VPN连接的问题,以便在必要时能够有效地进行居家学习/办公。
致谢
欲尽善本文,因所视短浅,怎奈所书皆是瞽言蒭议。行文至此,诚向予助与余者致以谢意。
参考
- 安全加固指南:如何更改 SSH 服务器的默认端口号
- 老蒋笔记 - 服务器能PING通但是SSH连不上的三个原因
文末投票 ↩︎