要通过外网登录Linux服务器,需完成服务器端配置、网络环境设置及客户端连接操作,同时需注重安全性,以下是详细步骤和注意事项:
登录前的必要准备
-
服务器具备公网IP或内网穿透能力
若服务器直接连接互联网,需有固定公网IP(可通过curl ifconfig.me
查看);若服务器在内网(如家庭、企业局域网),需通过路由器端口转发或内网穿透工具(如frp、ngrok)将公网端口映射到服务器内网IP。 -
开放服务器及网络防火墙端口
Linux服务器默认使用SSH协议(端口22),需确保防火墙允许该端口入站。- firewalld(CentOS 7+):
sudo firewall-cmd --permanent --add-service=ssh # 开放SSH服务 sudo firewall-cmd --reload # 重启防火墙
- iptables(传统Linux):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许22端口入站 sudo service iptables save # 保存规则
- 云服务器安全组:若使用阿里云、腾讯云等,需在控制台安全组中添加入站规则,协议选择“TCP”,端口“22”,源IP设置为“0.0.0.0/0”(或限制为特定IP)。
- firewalld(CentOS 7+):
-
确认SSH服务运行状态
执行sudo systemctl status sshd
(CentOS/Ubuntu)或sudo service ssh status
(Debian旧版),确保服务为“active running”状态,若未启动,可通过sudo systemctl start sshd
启动,并设置开机自启:sudo systemctl enable sshd
。
通过SSH直接连接(服务器有公网IP)
服务器端SSH配置优化(可选)
编辑SSH配置文件sudo vim /etc/ssh/sshd_config
,调整以下参数提升安全性:
Port 22
:可修改为非默认端口(如2222),减少扫描攻击;PermitRootLogin no
:禁用root直接登录,改用普通用户;PasswordAuthentication no
:后续可启用密钥认证替代密码;AllowUsers user1 user2
:限制允许登录的用户(需替换为实际用户名)。
修改后保存并重启SSH服务:sudo systemctl restart sshd
。
客户端连接操作
根据客户端操作系统选择工具:
客户端类型 | 工具 | 操作步骤 |
---|---|---|
Windows | PuTTY(图形界面) | 下载PuTTY,输入服务器公网IP、端口(默认22),选择SSH协议,点击“Open”;输入用户名和密码登录。 |
Windows | Xshell/Xftp | 新建会话,输入主机IP、端口、用户名,选择“密码”或“密钥认证”连接;支持多标签和文件传输。 |
Linux/macOS | 终端(命令行) | 执行ssh username@公网IP -p 端口 (如ssh ubuntu@123.45.67.89 -p 22 ),输入密码后登录。 |
无公网IP时的内网穿透(以frp为例)
若服务器在内网(无公网IP),可通过frp实现内网穿透,将内网SSH服务映射到公网端口。
服务端(公网服务器)配置
- 下载frp服务端程序(对应操作系统版本):frp官方下载
- 创建配置文件
frps.ini
:[common] bind_port = 7000 # frp服务监听端口 vhost_http_port = 8080 # 可选,用于HTTP穿透(非必需) dashboard_addr = 0.0.0.0 # 开启管理面板地址 dashboard_port = 7500 # 管理面板端口 dashboard_user = admin # 管理面板用户名 dashboard_pwd = admin123 # 管理面板密码
- 启动服务端:
./frps -c frps.ini
(后台运行可添加-d
参数)。
客户端(内网Linux服务器)配置
-
下载frp客户端程序,创建配置文件
frpc.ini
:[common] server_addr = 公网服务器IP # frp服务端IP server_port = 7000 # 与服务端bind_port一致 [ssh] type = tcp # 协议类型 local_ip = 127.0.0.1 # 内网服务器SSH本地IP local_port = 22 # 内网SSH端口 remote_port = 6000 # 公网映射端口(自定义,如6000)
-
启动客户端:
./frpc -c frpc.ini
。
连接内网服务器
通过公网服务器的IP和映射端口连接:ssh username@公网服务器IP -p 6000
(如ssh ubuntu@123.45.67.89 -p 6000
)。
安全加固措施
-
使用SSH密钥认证替代密码
- 客户端生成密钥对:
ssh-keygen -t rsa -b 4096
(一路回车即可生成,私钥~/.ssh/id_rsa
,公钥~/.ssh/id_rsa.pub
)。 - 将公钥上传至服务器:
ssh-copy-id username@服务器IP
(或手动将公钥内容追加到服务器~/.ssh/authorized_keys
文件)。 - 服务器端修改
/etc/ssh/sshd_config
,设置PasswordAuthentication no
,重启SSH服务。
- 客户端生成密钥对:
-
限制登录IP和失败次数
- 使用
fail2ban
工具防止暴力破解:安装sudo apt install fail2ban
(Ubuntu)或sudo yum install fail2ban
(CentOS),配置/etc/fail2ban/jail.local
,添加SSH监狱规则:[sshd] enabled = true port = 22 maxretry = 3 # 最大失败次数 bantime = 3600 # 封禁时间(秒)
- 通过iptables限制特定IP访问:
sudo iptables -A INPUT -s 恶意IP -j DROP
。
- 使用
-
定期更新系统和SSH服务
执行sudo apt update && sudo apt upgrade
(Ubuntu)或sudo yum update
(CentOS),及时修复安全漏洞。
相关问答FAQs
问题1:连接时提示“Permission denied (publickey,password)”怎么办?
解答:通常是由于认证方式配置错误或密钥未正确设置。
- 检查服务器
/etc/ssh/sshd_config
中PasswordAuthentication
和PubkeyAuthentication
是否均为yes
(若使用密钥认证,PasswordAuthentication
可设为no
); - 确认客户端公钥是否已上传至服务器
~/.ssh/authorized_keys
文件,且文件权限为600
(chmod 600 ~/.ssh/authorized_keys
); - 检查客户端私钥路径是否正确(如PuTTY需加载
.ppk
格式私钥,SSH命令可通过-i
指定私钥路径:ssh -i ~/.ssh/id_rsa username@IP
)。
问题2:如何避免SSH服务被频繁扫描攻击?
解答:可通过以下方式降低被扫描风险:
- 修改默认端口:将SSH端口从22改为非标准端口(如2222),减少自动化扫描工具的识别;
- 使用防火墙规则限制IP:通过iptables或firewalcd只允许特定IP访问SSH端口(如
sudo iptables -A INPUT -p tcp -s 信任IP --dport 22 -j ACCEPT
,其他IP拒绝); - 隐藏SSH服务版本:编辑
/etc/ssh/sshd_config
,设置DebianBanner no
(CentOS需修改/etc/ssh/sshd_config
中的#Banner none
取消注释),禁止SSH服务返回版本信息; - 启用SSH使用白名单:通过PAM模块配置
/etc/security/access.conf
,仅允许指定用户或IP登录SSH。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/38684.html