要通过外网登录Linux服务器,需要完成服务器端配置、网络设置及客户端连接操作,以下是详细步骤,涵盖准备工作、核心配置、连接方法及常见问题排查。
准备工作
-
服务器必备条件
- Linux服务器已安装并运行SSH服务(默认大多数发行版已安装)。
- 服务器拥有公网IP地址(如云服务器的弹性公网IP,或路由器端口映射后的内网IP)。
- 服务器网络可访问(防火墙、安全组已开放SSH端口)。
-
客户端工具
- Windows:PuTTY(图形化)、Xshell、或WSL/PowerShell内置SSH命令。
- macOS/Linux:终端自带SSH命令(
ssh
)。
-
关键信息
- 服务器公网IP(或域名)。
- SSH端口号(默认22,可自定义)。
- 服务器登录用户名(如root或普通用户)。
服务器端配置
确保SSH服务运行
检查SSH服务状态:
sudo systemctl status sshd # CentOS/RedHat sudo systemctl status ssh # Ubuntu/Debian
若未运行,启动并设置开机自启:
sudo systemctl start sshd/ssh sudo systemctl enable sshd/ssh
配置SSH允许外网登录
编辑SSH配置文件(/etc/ssh/sshd_config
):
sudo vim /etc/ssh/sshd_config
关键参数修改:
PermitRootLogin yes
:允许root直接登录(不推荐,建议改为no
改用普通用户)。PasswordAuthentication yes
:允许密码登录(若使用密钥认证,可改为no
)。Port 22
:自定义SSH端口(如Port 2222
,避免默认端口扫描)。AllowUsers user1 user2
:限制允许登录的用户(可选)。
保存后重启SSH服务:
sudo systemctl restart sshd/ssh
开放防火墙端口
根据系统防火墙类型开放端口:
- Ubuntu/Debian(ufw):
sudo ufw allow 22/tcp # 默认端口 sudo ufw allow 2222/tcp # 自定义端口 sudo ufw reload
- CentOS/RedHat(firewalld):
sudo firewall-cmd --permanent --add-port=22/tcp sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
- 云服务器安全组:若使用阿里云、腾讯云等,需在安全组规则中添加入方向,允许源IP访问SSH端口(如0.0.0.0/0表示允许所有IP,建议限制特定IP)。
配置内网穿透(可选,无公网IP时)
若服务器在内网(如家庭局域网),需通过路由器端口映射或内网穿透工具(如花生壳、frp)将公网请求转发到服务器内网IP。
- 路由器端口映射:登录路由器管理界面,在“虚拟服务器”或“端口转发”中,将公网端口映射到服务器内网IP的SSH端口。
客户端连接方法
命令行连接(通用)
格式:ssh username@公网IP -p 端口号
示例:
ssh root@123.45.67.89 -p 22 # 默认端口 ssh user@123.45.67.89 -p 2222 # 自定义端口
首次连接会提示“Are you sure you want to continue connecting (yes/no)?”,输入yes
即可。
Windows图形化工具(以PuTTY为例)
- 下载并打开PuTTY,输入“Host Name (or IP address)”为服务器公网IP。
- “Connection type”选择“SSH”,“Port”输入端口号(如22)。
- 在“Connection > Data”中输入“Auto-login username”(登录用户名)。
- 点击“Open”,首次连接会弹出安全警告,选择“是”,输入密码即可登录。
安全加固建议
-
禁用root直接登录
修改/etc/ssh/sshd_config
中PermitRootLogin no
,通过普通用户登录后切换至root(sudo su -
)。 -
使用密钥认证代替密码
- 客户端生成密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
生成后会在
~/.ssh/
目录下得到id_rsa
(私钥)和id_rsa.pub
(公钥)。 - 上传公钥到服务器:
ssh-copy-id user@公网IP -p 端口号
或手动将公钥内容追加到服务器
~/.ssh/authorized_keys
文件中。 - 禁用密码登录:
修改/etc/ssh/sshd_config
中PasswordAuthentication no
,重启SSH服务。
- 客户端生成密钥对:
-
定期更新SSH服务
sudo apt update && sudo apt upgrade openssh-server # Ubuntu/Debian sudo yum update openssh-server # CentOS/RedHat
常见问题排查
问题现象 | 可能原因及解决方法 |
---|---|
连接超时/无法连接 | 检查公网IP是否正确;2. 确认防火墙/安全组已开放SSH端口;3. 检查SSH服务是否运行。 |
提示“Permission denied” | 检查用户名/密码错误;2. 若使用密钥认证,确认公钥已上传到服务器;3. 检查~/.ssh 目录权限(需700,authorized_keys 需600)。 |
连接后立即断开 | 检查服务器磁盘空间(df -h );2. 检查SSH配置MaxSessions 或LoginGraceTime 参数;3. 确认网络稳定。 |
FAQs
Q1:为什么外网无法连接SSH,但内网可以?
A:通常因防火墙或安全组未开放SSH端口,需检查:
- 服务器防火墙(如ufw、firewalld)是否允许外网访问SSH端口;
- 云服务器安全组是否添加了入方向规则(源IP为0.0.0.0/0或特定IP,端口为SSH端口);
- 若为内网服务器,需在路由器上配置端口映射,将公网端口转发到服务器内网IP的SSH端口。
Q2:如何提高SSH连接的安全性?
A:可通过以下措施加固:
- 修改默认端口:将SSH端口从22改为其他高位端口(如2222),减少扫描攻击;
- 禁用root登录:设置
PermitRootLogin no
,通过普通用户登录后提权; - 使用密钥认证:关闭密码登录(
PasswordAuthentication no
),仅允许密钥对认证; - 限制访问IP:在防火墙或SSH配置中使用
AllowUsers
或DenyUsers
限制允许登录的用户IP; - 定期更新:及时更新SSH服务版本,修复已知漏洞。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38672.html