三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

不只是远程桌面:用向日葵在Ubuntu上实现无人值守文件传输与SSH隧道

不只是远程桌面:用向日葵在Ubuntu上实现无人值守文件传输与SSH隧道

超越远程桌面:向日葵在Ubuntu上的高阶自动化实践

当大多数人提起向日葵时,第一反应往往是"远程控制软件"。但这款工具的实际能力远不止于此——在开发者手中,它可以成为打通内外网的生产力中枢。想象这样一个场景:你正在咖啡馆修改代码,突然需要访问家中实验室服务器的某个配置文件;或者出差时发现线上服务异常,必须立即通过跳板机连接内网排查。此时,一台配置得当的Ubuntu服务器加上向日葵,就能构建起无需公网IP的自动化运维通道。

1. 基础环境配置与安全加固

1.1 非图形化环境部署方案

对于服务器环境,建议使用向日葵的命令行版本而非图形界面版本。通过SSH连接服务器后执行以下命令获取最新安装包:

wget https://sunlogin.oray.com/download/linux?type=advanced -O sunlogin.deb sudo dpkg -i sunlogin.deb || sudo apt-get install -f -y

安装完成后立即修改默认配置,关闭不必要的功能模块。编辑配置文件/usr/local/sunlogin/etc/sunlogin.conf,关键参数示例如下:

[security] autologin = 0 remote_print = 0 clipboard_share = 1 # 仅在需要时开启剪贴板共享 [network] upnp = 0 # 禁用UPnP自动端口映射

1.2 多因素认证配置

向日葵默认的验证码机制存在被暴力破解的风险,建议绑定硬件令牌或配置二次验证。在控制台执行以下命令生成访问密钥:

sudo /usr/local/sunlogin/bin/sunlogin_console -genkey

生成的密钥需配合手机APP扫码绑定,此后每次连接都需要物理设备确认。对于需要自动化操作的场景,可以创建独立的白名单密钥:

sudo /usr/local/sunlogin/bin/sunlogin_console -addkey -name "CI/CD" -perm "file,ssh"

2. 无人值守文件传输系统

2.1 基于CLI的批量文件操作

向日葵的远程文件功能可以通过命令行实现自动化同步。以下脚本实现本地与远程服务器的双向同步:

#!/bin/bash SUNLOGIN_ID="你的设备ID" SUNLOGIN_PWD="访问密码" # 上传整个目录到远程服务器 sunlogin_file -u -i $SUNLOGIN_ID -p $SUNLOGIN_PWD \ -l /path/to/local/folder -r /remote/path --overwrite # 从远程下载更新的文件 sunlogin_file -d -i $SUNLOGIN_ID -p $SUNLOGIN_PWD \ -l /local/path -r /remote/path --only-newer

将脚本加入cron可实现定时同步,例如每天凌晨3点执行:

0 3 * * * /path/to/sync_script.sh >> /var/log/sunlogin_sync.log 2>&1

2.2 增量备份解决方案

结合rsync和向日葵实现跨网络备份:

rsync -avz --delete /source/folder /tmp/backup_$(date +%Y%m%d) sunlogin_file -u -i $ID -p $PWD -l /tmp/backup_* -r /backup find /tmp -name "backup_*" -mtime +7 -exec rm {} \;

3. SSH隧道的高级应用场景

3.1 构建持久化反向隧道

当目标服务器位于多层NAT后时,常规SSH端口转发可能失效。通过向日葵建立可靠隧道:

autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" \ -NR 2222:localhost:22 sunlogin@oray.com -p 62000

~/.ssh/config中添加配置简化连接:

Host remote-server HostName localhost Port 2222 User ubuntu ProxyCommand nc -X connect -x 127.0.0.1:1080 %h %p

3.2 多跳内网穿透方案

对于复杂网络环境,可以串联多个向日葵节点实现深度穿透:

本地设备 → 跳板机A(向日葵) → 跳板机B(向日葵) → 目标服务器

对应的SSH配置示例:

Host target-via-double-jump HostName 192.168.1.100 User admin ProxyCommand ssh -W %h:%p jump-B ProxyJump jump-A

4. 系统集成与监控方案

4.1 服务状态监控脚本

通过向日葵API获取设备状态并集成到监控系统:

import requests def check_sunlogin_status(device_id): api_url = f"https://api.oray.com/device/{device_id}/status" response = requests.get(api_url, headers={"Authorization": "Bearer your_api_key"}) return response.json()['online'] if not check_sunlogin_status('DEV123456'): send_alert("向日葵连接异常!")

4.2 自动化运维工作流

将向日葵与CI/CD工具集成,实现远程部署:

# GitLab CI 示例 deploy_production: stage: deploy script: - apt-get install -y sunlogin-client - sunlogin_console -login -u $SUNLOGIN_USER -p $SUNLOGIN_PASS - sunlogin_file -u -i $PROD_SERVER_ID -p $PROD_ACCESS_CODE -l ./build -r /app - sunlogin_ssh -i $PROD_SERVER_ID -p $PROD_ACCESS_CODE "cd /app && ./restart.sh"

5. 性能优化与故障排查

5.1 网络传输加速配置

修改/etc/sysctl.conf优化TCP协议栈:

net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.ipv4.tcp_fastopen = 3

向日葵客户端单独配置QoS策略:

sudo tc qdisc add dev eth0 root handle 1: htb sudo tc class add dev eth0 parent 1: classid 1:10 htb rate 10mbit sudo tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip dst 203.107.45.0/24 flowid 1:10

5.2 常见问题诊断指南

连接延迟高

  1. 使用mtr命令检查网络路由
  2. 尝试切换向日葵服务器区域
  3. 检查本地网络是否启用QoS限速

文件传输中断

# 检查系统inotify限制 sysctl fs.inotify.max_user_watches # 临时提高限制 echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches

在树莓派等ARM设备上运行时,可能需要手动加载内核模块:

sudo modprobe tun sudo echo "tun" >> /etc/modules-load.d/sunlogin.conf
← 返回列表