如何实现外网安全登录Linux服务器?

要通过外网登录Linux服务器,需完成服务器端配置、网络环境设置及客户端连接操作,同时需注重安全性,以下是详细步骤和注意事项:

如何外网登录linux服务器

登录前的必要准备

  1. 服务器具备公网IP或内网穿透能力
    若服务器直接连接互联网,需有固定公网IP(可通过curl ifconfig.me查看);若服务器在内网(如家庭、企业局域网),需通过路由器端口转发或内网穿透工具(如frp、ngrok)将公网端口映射到服务器内网IP。

  2. 开放服务器及网络防火墙端口
    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)。
  3. 确认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

客户端连接操作

根据客户端操作系统选择工具:

如何外网登录linux服务器

客户端类型 工具 操作步骤
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)。

安全加固措施

  1. 使用SSH密钥认证替代密码

    如何外网登录linux服务器

    • 客户端生成密钥对: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服务。
  2. 限制登录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
  3. 定期更新系统和SSH服务
    执行sudo apt update && sudo apt upgrade(Ubuntu)或sudo yum update(CentOS),及时修复安全漏洞。

相关问答FAQs

问题1:连接时提示“Permission denied (publickey,password)”怎么办?
解答:通常是由于认证方式配置错误或密钥未正确设置。

  • 检查服务器/etc/ssh/sshd_configPasswordAuthenticationPubkeyAuthentication是否均为yes(若使用密钥认证,PasswordAuthentication可设为no);
  • 确认客户端公钥是否已上传至服务器~/.ssh/authorized_keys文件,且文件权限为600chmod 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

(0)
酷番叔酷番叔
上一篇 2025年10月9日 02:22
下一篇 2025年10月9日 02:32

相关推荐

  • jacob如何在Linux环境中正确部署?

    Jacob(Java-COM Bridge)是一个用于Java程序调用Windows组件对象模型(COM)组件的库,但由于COM技术是Windows特有的,直接在Linux环境中部署Jacob存在原生不兼容的问题,要实现类似功能,需通过模拟环境、替代方案或间接调用等策略,以下是详细的部署步骤及方案分析,理解Ja……

    2025年8月24日
    8500
  • linux中如何切换用胡

    Linux中切换用户,可用su 用户名(切换到指定用户)

    2025年8月19日
    8900
  • linux 如何查看php日志

    Linux系统中,可以通过以下命令查看PHP日志:`cat /var/log/php7.

    2025年8月17日
    7700
  • Linux中如何终止一个正在运行的脚本?

    在Linux系统中,脚本作为自动化任务的核心载体,其运行状态的管理至关重要,无论是调试异常、释放资源还是终止无响应任务,掌握正确的脚本终止方法都是Linux用户的必备技能,本文将详细讲解Linux中终止脚本的多种方式,涵盖前台、后台进程及不同场景下的处理技巧,帮助用户高效管理脚本运行状态,前台脚本的终止方法前台……

    2025年9月8日
    8100
  • Linux如何查看网络端口状态及占用情况?

    在Linux系统中,网络端口管理是系统运维和开发中的核心任务之一,无论是排查服务是否正常监听、诊断端口冲突,还是进行安全审计,都需要掌握查看网络端口的方法,Linux提供了多种命令和工具来查看端口状态、关联进程及详细信息,下面将详细介绍这些工具的使用方法及适用场景,使用netstat命令查看端口netstat是……

    2025年8月22日
    8900

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-880-8834

在线咨询: QQ交谈

邮件:HI@E.KD.CN

关注微信