远程访问(内网穿透)


仅靠ssh,等只能实现同局域网下的服务器访问,本文介绍使用cpolar内网穿透工具实现非同局域网下的访问,不需要公网ip或云服务器。

基于cpolar实现远程

依赖

远程:1804 ubuntu
软件依赖:ssh,xrdp, cpolar
本地:win10
软件依赖:mstsc.exe(远程桌面)

cpolar安装

1.登录官网,注册账号
https://www.cpolar.com/

2.远程ubuntu安装cpolar
2.1 下载安装cpolar

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash

curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh >install-release-cpolar.sh && bash install-release-cpolar.sh

(国外使用)

curl -sL https://git.io/cpolar | sudo bash

2.2 添加及启动服务
添加cpolar服务

sudo systemctl enable cpolar

启动cpolar服务:

sudo systemctl start cpolar

查看服务状态,如正常显示为active则状态启动正常
在这里插入图片描述

sudo systemctl status cpolar
  1. 查看及隧道创建
    通过浏览器访问127.0.0.1:9200locahost:9200,而后使用注册的cpolar账号登录。
    登录成功后,点击左上角三横:
    在这里插入图片描述
    点击隧道管理,创建隧道:
    在这里插入图片描述
    输入如下配置,点击创建远程桌面的ip及端口
    在这里插入图片描述
    查看隧道:
    在这里插入图片描述
    在这里插入图片描述
    画出红线部分为公网ip

隧道名称:可自定义填写,注意不要重复即可
协议:支持http/https/tcp协议,这里选择http
本地地址:填写内网端口号,如8080
域名类型:免费选择随机
地区:选择China或者China vip

参考:https://blog.csdn.net/LisaCpolar/article/details/124320497

使用

终端访问

打开本地shell,或安装ssh的命令行
输入:

ssh -p [端口号] [hostname]@[公网ip]

确认私钥,输入密码登录。
【公网ip:生成端口号】与前文创建的ssh的公网地址(默认就会创建)一致,如下示例:
在这里插入图片描述

传输文件

#从远程机拷贝文件到本地
scp -P [端口号] [hostname]@[公网ip]:[文件路径] [本机路径]

#从本地拷贝到远程机
scp -P [端口号]  [本机路径] [hostname]@[公网ip]:[文件路径]

#拷贝文件夹
scp -r -P [端口号]  [本机路径] [文件路径]
#eg:
scp -r -P 13890 abc@9.tcp.cpolar.top:~/Desktop/pkg/ .

远程桌面访问

打开远程桌面:
输入:[公网ip:生成端口号],连接,输入账号密码。
【公网ip:生成端口号】与前文创建的remote-desk的公网地址一致,如下例子:
在这里插入图片描述
参考链接https://www.cpolar.com/blog/windows10-remote-desktop?channel=0&invite=4Mz5#3


其他方案

需要公网ip服务器或云服务器

以下是支持SSH协议且‌免费安全‌的内网穿透工具推荐(综合性能与易用性均优于或接近cpolar):
FRP:高性能,支持TCP,适合技术用户
NATOOL:图形界面,动态DNS,适合新手
NPS:轻量级,Web管理
ZeroTier:P2P加密,适合多设备

一、‌FRP (Fast Reverse Proxy)‌ ‌
‌SSH支持‌:通过TCP协议映射本地SSH端口(默认22),实现远程安全访问内网服务器。
‌核心优势‌:
‌高性能反向代理‌:采用C/S架构,支持负载均衡和健康检查,保障SSH连接稳定性‌。
‌自定义配置‌:可设置访问密码、限制IP白名单,提升安全性‌。
‌部署建议‌:需自建服务端(如云服务器),技术门槛较高,适合开发者或运维人员‌。
二、‌NATOOL‌ ‌
‌SSH支持‌:通过TCP隧道将内网SSH服务暴露至公网,支持域名绑定。
‌核心优势‌:
‌图形化操作‌:提供可视化界面,一键生成SSH穿透配置,新手友好‌。
‌动态DNS‌:自动更新域名解析,解决内网IP变动问题‌。
‌适用场景‌:家庭NAS、远程维护小型服务器等轻量级需求。
三、‌NPS (Network Port Shield)‌ ‌
‌SSH支持‌:支持TCP端口映射,兼容SSH、远程桌面等协议。
‌核心优势‌:
‌Web管理端‌:通过浏览器配置SSH穿透规则,操作便捷‌。
‌轻量化设计‌:资源占用低,适合部署在低配置服务器或树莓派‌。
‌安全性‌:支持隧道加密和客户端身份验证,防止未授权访问‌。
四、‌ZeroTier‌ ‌
‌SSH支持‌:基于虚拟局域网(SD-WAN)实现P2P直连,无需端口映射即可SSH访问内网设备。
‌核心优势‌:
‌端到端加密‌:采用AES-256加密,安全性高于传统穿透工具‌。
‌跨平台兼容‌:支持Windows/Linux/Mac/移动端,适合多设备协同‌。
‌不足‌:需在所有设备安装客户端,且免费版限100台设备‌。
五、‌Ngrok(临时备用)‌ ‌
‌SSH支持‌:通过TCP隧道生成公网地址,临时测试可用。
‌缺点‌:免费版域名随机、连接不稳定,仅建议短期调试使用‌。
综合建议:
‌技术用户/高稳定性需求‌:首选‌FRP‌或‌NPS‌,功能全面且可控性强‌。
‌小白用户/快速部署‌:推荐‌NATOOL‌(图形化)或‌ZeroTier‌(免配置)‌。
‌临时场景‌:可尝试‌Ngrok‌,但需接受稳定性风险‌。


再其他

在 Ubuntu 上实现安全的内网穿透并远程访问 SSH,需结合加密传输、身份验证和最小化暴露等安全原则。以下是几种高安全性的方案:

⚠️ 安全前置条件(必须配置)

  1. 禁用 SSH 密码登录
    修改 /etc/ssh/sshd_config

    PasswordAuthentication no
    PermitRootLogin no
    

    重启 SSH 服务:

    sudo systemctl restart sshd
    
  2. 使用 SSH 密钥对
    生成强密钥(Ed25519):

    ssh-keygen -t ed25519 -a 100 -C "your_email@example.com"
    
  3. 防火墙限制
    仅允许必要端口(如 SSH 的 22 端口):

    sudo ufw allow 22/tcp
    sudo ufw enable
    

方案 1:Tailscale(基于 WireGuard 的零配置 VPN)

优势:自动 NAT 穿透、端到端加密、无需公网 IP
适用场景:个人或小团队远程访问

  1. 安装 Tailscale

    curl -fsSL https://tailscale.com/install.sh | sh
    
  2. 启动并认证

    sudo tailscale up
    

    按提示打开链接登录账号(支持 Google/GitHub 等 SSO)。

  3. 直接 SSH 访问
    在另一台设备登录 Tailscale 后,直接通过 Tailscale 分配的 IP 连接:

    ssh user@100.x.y.z
    

安全增强

  • 在 Tailscale 控制台启用 双因素认证 (2FA)
  • 设置 访问策略(限制设备访问权限)。

方案 2:WireGuard VPN(手动部署)

优势:轻量级、高性能、现代加密协议
适用场景:对网络控制有更高要求的用户

  1. 安装 WireGuard

    sudo apt update && sudo apt install wireguard
    
  2. 生成密钥对

    umask 077
    wg genkey | tee privatekey | wg pubkey > publickey
    
  3. 服务端配置(有公网 IP 的服务器)
    创建 /etc/wireguard/wg0.conf

    [Interface]
    Address = 10.0.0.1/24
    ListenPort = 51820
    PrivateKey = <SERVER_PRIVATE_KEY>
    
    [Peer]
    PublicKey = <CLIENT_PUBLIC_KEY>
    AllowedIPs = 10.0.0.2/32
    
  4. 客户端配置(内网 Ubuntu 主机)
    创建 /etc/wireguard/wg0.conf

    [Interface]
    Address = 10.0.0.2/24
    PrivateKey = <CLIENT_PRIVATE_KEY>
    
    [Peer]
    PublicKey = <SERVER_PUBLIC_KEY>
    Endpoint = <SERVER_PUBLIC_IP>:51820
    AllowedIPs = 10.0.0.0/24
    PersistentKeepalive = 25
    
  5. 启动 WireGuard

    sudo systemctl enable --now wg-quick@wg0
    
  6. 通过 VPN 连接 SSH

    ssh user@10.0.0.2
    

方案 3:SSH 反向隧道(无 VPN)

优势:无需额外工具,仅用 SSH 原生功能
适用场景:临时访问或资源有限的环境

  1. 在内网主机创建反向隧道

    ssh -R 2222:localhost:22 -N -f user@jump-server.com
    
    • -R 2222:localhost:22:将跳板机的 2222 端口转发到内网主机的 22 端口。
    • -N -f:后台运行不执行命令。
  2. 通过跳板机连接内网主机
    在跳板机上执行:

    ssh -p 2222 localhost
    

安全加固

  • 使用 autossh 保持隧道稳定:
    autossh -M 0 -R 2222:localhost:22 user@jump-server.com
    
  • 在跳板机限制来源 IP:
    sudo ufw allow from YOUR_IP to any port 2222
    

🔒 通用安全建议

  1. 定期更新系统

    sudo apt update && sudo apt upgrade -y
    
  2. 监控登录尝试

    sudo grep 'sshd' /var/log/auth.log
    
  3. 限制 SSH 访问 IP(若有固定公网 IP):

    sudo ufw allow from YOUR_IP to any port 22
    

方案对比

方案安全性易用性稳定性适用场景
Tailscale★★★★★★★★★★★★★★★个人/团队长期使用
WireGuard★★★★★★★★☆☆★★★★☆自定义网络拓扑
SSH 反向隧道★★★☆☆★★☆☆☆★★☆☆☆临时访问

推荐优先级:Tailscale > WireGuard > SSH 反向隧道。选择时需权衡安全需求与运维复杂度。

以下是使用强密钥对配置 SSH 服务端并通过密钥登录的完整流程:


一、生成强密钥对(客户端操作)

1. 生成 Ed25519 密钥(推荐)
ssh-keygen -t ed25519 -a 100 -C "your_comment"
  • -t ed25519:使用更安全的 Ed25519 算法
  • -a 100:增加密钥派生迭代次数增强抗暴力破解
  • -C "备注":添加密钥注释(如邮箱)
2. 生成过程中按需配置
Enter file in which to save the key (/home/user/.ssh/id_ed25519): [直接回车]
Enter passphrase (empty for no passphrase): [输入密钥保护密码(强烈建议设置)]
3. 生成结果
~/.ssh/id_ed25519   # 私钥(绝不可泄露)
~/.ssh/id_ed25519.pub # 公钥(需上传到服务端)

二、配置 SSH 服务端(Ubuntu 服务器)

1. 创建 .ssh 目录(如不存在)
mkdir -p ~/.ssh
chmod 700 ~/.ssh
2. 将公钥写入 authorized_keys
# 方法 1:手动复制(适合单次操作)
cat id_ed25519.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

# 方法 2:使用 ssh-copy-id(推荐)
ssh-copy-id -i ~/.ssh/id_ed25519.pub user@server_ip
3. 修改 SSH 服务端配置

编辑 /etc/ssh/sshd_config

sudo nano /etc/ssh/sshd_config

关键配置项:

PubkeyAuthentication yes      # 启用密钥认证
AuthorizedKeysFile .ssh/authorized_keys # 公钥存储路径
PasswordAuthentication no    # 禁用密码登录
PermitRootLogin no           # 禁止 root 直接登录
ChallengeResponseAuthentication no  # 关闭交互认证
4. 重启 SSH 服务
sudo systemctl restart sshd

三、客户端通过密钥登录

1. 基础连接命令
ssh -i ~/.ssh/id_ed25519 user@server_ip
2. 简化登录(配置 ~/.ssh/config
nano ~/.ssh/config

添加内容:

Host myserver
    HostName server_ip
    User username
    IdentityFile ~/.ssh/id_ed25519
    IdentitiesOnly yes

之后可直接用别名登录:

ssh myserver
3. 带密码短语的密钥自动管理
# 启动 ssh-agent
eval "$(ssh-agent -s)"

# 添加密钥到 agent
ssh-add ~/.ssh/id_ed25519

(输入一次密码短语后,后续连接无需重复输入)


四、安全增强措施

1. 服务端防火墙配置
sudo ufw allow from your_client_ip to any port 22
sudo ufw enable
2. 修改 SSH 端口(可选)

编辑 /etc/ssh/sshd_config

Port 49200  # 改为高位端口(需同步修改防火墙规则)
3. Fail2Ban 安装
sudo apt install fail2ban
sudo systemctl enable fail2ban

五、故障排查

1. 调试连接问题
ssh -vT user@server_ip  # -v 查看详细日志
2. 检查服务端日志
sudo tail -f /var/log/auth.log
3. 常见错误解决
  • Permission denied (publickey)
    检查项:
    • 服务端 sshd_config 是否启用 PubkeyAuthentication
    • 客户端密钥路径是否正确
    • authorized_keys 文件权限是否为 600
    • SELinux/AppArmor 是否阻止访问

六、密钥管理最佳实践

  1. 私钥保护

    • 不要共享私钥
    • 使用密码短语保护
    • 定期轮换密钥(建议每 6-12 个月)
  2. 多主机管理

    # 为不同服务使用不同密钥
    ssh-keygen -t ed25519 -f ~/.ssh/work-server-key
    
  3. 撤销密钥
    直接删除服务端 authorized_keys 中对应公钥即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值