| 2025-02-23
远程访问中的 SSH 隧道配置,关键在于前期准备、具体配置步骤、测试验证以及安全防护。通过这些步骤,能让用户安全、稳定地进行远程访问,实现本地与远程服务器之间的数据传输。下面为你详细介绍具体配置方法。
一、前期准备
(一)安装 SSH 服务
1.Linux 系统:对于基于 Red Hat 系列的系统,如 CentOS、RHEL 等,可以使用yum命令安装。首先检查系统是否已安装 SSH 服务,使用命令rpm -qa | grep ssh,若未安装,执行sudo yum install sshd或sudo yum install openssh-server。对于 Debian 系列的系统,如 Ubuntu、Linux Mint 等,使用apt - get命令安装,执行sudo apt - get install sshd或sudo apt - get install openssh-server。如果不确定系统类型,可以分别尝试yum和apt - get命令,查看哪个命令可用。
2.Windows 系统:Windows 本身没有内置 SSH 服务器,但可以通过安装 OpenSSH 服务来实现。在 Windows 10 及以上版本中,可以在 “应用和功能” 中选择 “可选功能”,然后搜索 “OpenSSH 服务器” 进行安装。也可以从 OpenSSH 官方网站下载安装包进行安装。
(二)确认网络连接
1.检查服务器 IP 地址:在服务器端,使用ifconfig(Linux 系统)或ipconfig(Windows 系统)命令查看服务器的 IP 地址。确保服务器的网络连接正常,能够与外部网络通信。
2.检查客户端网络:在客户端,同样要确保网络连接正常,能够访问服务器的 IP 地址。可以使用ping命令测试与服务器的连通性,如ping server_ip,其中server_ip是服务器的 IP 地址。
二、SSH 隧道配置
(一)基本 SSH 连接配置
1.修改 SSH 端口:默认情况下,SSH 使用 22 端口,但这个端口容易成为黑客攻击的目标,为了提高安全性,建议修改为其他端口。在 Linux 系统中,编辑 SSH 配置文件/etc/ssh/sshd_config,找到Port 22这一行,将其修改为其他 4 位数以上的端口,如Port 10022。修改完成后,保存文件并重启 SSH 服务,在 Linux 系统中使用命令sudo systemctl restart sshd(对于使用systemd的系统)或service sshd restart(对于传统的 SysVinit 系统)。
2.配置防火墙:如果服务器启用了防火墙,需要开放修改后的 SSH 端口。在 Linux 系统中,以 CentOS 为例,使用firewall - cmd命令开放端口,如sudo firewall - cmd --zone=public --add - port=10022/tcp --permanent,然后重新加载防火墙配置sudo firewall - cmd --reload。对于使用iptables的系统,如 Ubuntu,可以使用命令iptables -I INPUT -p tcp --dport 10022 -j ACCEPT开放端口,然后保存配置service iptables save,并重启防火墙/etc/init.d/iptables restart或service iptables restart。
(二)建立 SSH 隧道
1.本地端口转发:假设本地有一个应用程序运行在本地端口 8080,需要通过 SSH 隧道访问远程服务器上的服务。在客户端使用命令ssh -L local_port:target_host:target_port username@server_ip,其中local_port是本地监听的端口,如 8080;target_host是目标服务器的地址;target_port是目标服务器上服务的端口;username是在服务器上的用户名;server_ip是 SSH 服务器的 IP 地址。例如,要将本地的 8080 端口映射到远程服务器 192.168.1.100 上的 80 端口,使用命令ssh -L 8080:192.168.1.100:80 user@192.168.1.1,输入密码后即可建立隧道。建立成功后,访问本地的 8080 端口,实际上访问的是远程服务器的 80 端口。
2.远程端口转发:与本地端口转发相反,远程端口转发是将远程服务器上的端口转发到本地。在客户端使用命令ssh -R remote_port:target_host:target_port username@server_ip,其中remote_port是远程服务器上监听的端口;target_host是目标服务器的地址;target_port是目标服务器上服务的端口;username是在服务器上的用户名;server_ip是 SSH 服务器的 IP 地址。例如,将远程服务器 192.168.1.100 上的 9000 端口转发到本地的 127.0.0.1:8080,使用命令ssh -R 9000:127.0.0.1:8080 user@192.168.1.100。
(三)使用花生壳实现内网穿透(若服务器无公网 IP)
1.注册与安装:访问花生壳官网(https://hsk.oray.com/ ),注册账号并进行实名认证。然后根据服务器的操作系统下载对应的花生壳客户端软件,如在 Linux 系统中,下载后使用命令rpm -i phddns_5.3.0_amd64.rpm进行安装,安装完成后会生成设备码和密码。启动花生壳服务并设置开机自启动,使用命令systemctl start phddns_mini_httpd.service和systemctl enable phddns_mini_httpd.service。
2.添加映射:在花生壳官网后台系统,添加设备。在内网穿透选项中添加映射,协议选择 SSH 协议。内网 IP 填写服务器的内网 IP,端口填写修改后的 SSH 端口(如 10022)。例如,服务器的内网 IP 为 192.168.1.100,SSH 端口为 10022,在花生壳中进行相应设置。花生壳会生成一个外网访问地址和端口。
3.连接测试:使用 SSH 客户端工具,如 Xshell,连接时主机 IP 填写花生壳分配的域名,端口填写花生壳分配的端口,输入服务器上的用户名和密码,尝试连接。如果连接成功,说明内网穿透配置成功。
三、测试与验证
(一)连接测试
1.使用 SSH 客户端:在客户端使用 SSH 客户端工具,如 PuTTY(Windows 系统)或自带的终端(Linux 系统),输入服务器的 IP 地址(或花生壳分配的域名)和端口,以及用户名和密码,尝试连接服务器。如果能够成功登录服务器,说明 SSH 隧道配置基本成功。
2.访问服务测试:如果通过 SSH 隧道进行了端口转发,测试相应的服务是否能够正常访问。例如,通过本地端口转发将本地的 8080 端口映射到远程服务器的 80 端口,在浏览器中输入http://localhost:8080,如果能够访问到远程服务器上的 Web 服务,说明端口转发配置正确。
(二)性能测试
1.使用工具测试:使用工具如iperf来测试 SSH 隧道的传输性能。在服务器端和客户端分别运行iperf,设置相应的参数进行测试。在服务器端运行iperf -s启动服务,在客户端运行iperf -c server_ip连接服务器进行测试,其中server_ip是服务器的 IP 地址。通过测试结果,可以了解隧道的带宽、延迟等性能指标,判断是否满足业务需求。
2.实际业务测试:在实际业务场景中进行测试,如上传和下载文件,查看文件传输的速度和稳定性。如果在测试过程中发现速度较慢或连接不稳定,检查网络配置、服务器负载等因素,进行优化。
四、安全防护
(一)密钥认证
1.生成密钥对:在客户端使用ssh - keygen命令生成密钥对。运行命令后,按提示选择密钥保存路径(默认路径为~/.ssh/id_rsa),设置密码(可选,建议设置以增强安全性)。生成的公钥文件为id_rsa.pub,私钥文件为id_rsa。
2.上传公钥:将生成的公钥上传到服务器。使用ssh - copy - id username@server_ip命令,该命令会自动将公钥添加到服务器的~/.ssh/authorized_keys文件中。也可以手动将公钥内容复制到服务器的authorized_keys文件中。通过密钥认证,相比密码认证更加安全,因为私钥只有在客户端掌握,即使网络传输的信息被窃取,没有私钥也无法登录服务器。
(二)限制登录
1.限制 IP 地址:在服务器端的/etc/ssh/sshd_config配置文件中,添加或修改AllowUsers或AllowGroups配置项,限制只有特定的 IP 地址或用户组可以登录。例如,AllowUsers user1@192.168.1.0/24表示只允许 192.168.1.0/24 网段的 user1 用户登录。
2.禁用密码登录:在/etc/ssh/sshd_config文件中,将PasswordAuthentication设置为no,禁用密码登录,只允许密钥认证登录。这样即使密码被破解,攻击者也无法登录服务器,大大增强了 SSH 隧道的安全性。修改完成后,重启 SSH 服务使配置生效。
拓展阅读:
1.什么是端口转发:端口转发是将一个端口的网络流量重定向到另一个端口或另一个 IP 地址的端口,实现不同网络环境下设备之间的通信,如 SSH 隧道中的本地端口转发和远程端口转发。
2.如何选择安全的 SSH 端口:应避免使用常见的默认端口(如 22),选择 4 位数以上、不与其他常用服务冲突的端口,同时结合防火墙策略,只允许特定 IP 地址访问该端口,提高安全性。
3.SSH 密钥对的工作原理是什么:SSH 密钥对由公钥和私钥组成,公钥存储在服务器上,私钥由客户端保管。客户端向服务器发送连接请求时,服务器用公钥对数据进行加密,客户端用私钥解密,只有拥有正确私钥的客户端才能成功解密,从而实现安全认证和通信。