远程连接服务器:Ping通但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连接的问题,以便在必要时能够有效地进行居家学习/办公。


致谢

欲尽善本文,因所视短浅,怎奈所书皆是瞽言蒭议。行文至此,诚向予助与余者致以谢意。


参考


  1. 文末投票 ↩︎
相关推荐
扣得君1 小时前
C++20 Coroutine Echo Server
运维·服务器·c++20
keep__go1 小时前
Linux 批量配置互信
linux·运维·服务器·数据库·shell
矛取矛求1 小时前
Linux中给普通账户一次性提权
linux·运维·服务器
jieshenai2 小时前
使用VSCode远程连接服务器并解决Neo4j无法登陆问题
服务器·vscode·neo4j
渗透测试老鸟-九青2 小时前
通过投毒Bingbot索引挖掘必应中的存储型XSS
服务器·前端·javascript·安全·web安全·缓存·xss
Gentle5862 小时前
labview连接sql server数据库
服务器·数据库·labview
co0t2 小时前
计算机网络(11)和流量控制补充
服务器·网络·计算机网络
ʚɞ4963 小时前
应用程序部署(IIS的相关使用,sql server的相关使用)
运维·服务器
少陽君3 小时前
服务器显卡和桌面pc显卡有什么不同
运维·服务器
daizikui3 小时前
Linux文件目录命令
linux·运维·服务器