2026/9/30 6:13:45

CentOS 7纯命令行安装向日葵:无桌面服务器远程控制完整指南

CentOS 7纯命令行安装向日葵:无桌面服务器远程控制完整指南 1. 为什么非要在纯命令行的CentOS 7上装向日葵1.1 我遇到的实际场景一台没有桌面的服务器需要图形远程先交代一下背景。我之前帮朋友维护一台机房里的 CentOS 7 机器系统是最小化安装的连桌面环境都没装平时全靠 SSH 登进去敲命令。某天客户需要远程看一下服务器上某个图形化工具的界面还希望能在界面上直接点两下演示给他们看。SSH 干不了这事儿我在现场又没法跑一趟机房只能想别的办法。这时候我第一个想到的其实是 VNC但折腾了一圈发现配置成本太高要装 tigervnc-server、设置密码、改 xstartup、还要处理本地回环和防火墙更麻烦的是这台机器在 NAT 后面根本没有公网 IPVNC 要对外提供服务还得先在路由器上做端口映射。我连路由器后台都进不去这条路直接堵死。后来想到向日葵。向日葵的核心模式是识别码 验证码由客户端主动向云端发起连接不需要公网 IP也不需要你在路由器上开端口远程连接的时候对面只需要拿到你的识别码和验证码在任意一台有向日葵客户端的设备上输入就能连过来。这就非常适合内网服务器、无公网 IP 的机器以及像我这种只能通过 SSH 远程操作的场景。没错向日葵并不是只能在 Windows 或带桌面的 Linux 上装。它其实有一整套 Linux 版客户端在纯命令行的 CentOS 7 环境下也能通过 rpm 包安装装完以后守护进程在后台运行不需要你自己去启动图形界面。关键在于安装过程要足够干净全程不依赖浏览器全凭命令完成。这篇文章就是把我在 CentOS 7 最小化安装环境下纯命令行部署向日葵的完整过程、踩过的坑、以及排查思路都记录下来给同样需要在无头服务器上装远程控制软件的朋友一个参考。1.2 先确认系统和环境别急着找安装包很多人在这一步容易翻车下载了 rpm 包结果架构不对安装的时候直接报错wrong architecture。所以不管多着急动手之前先把系统和机器架构确认清楚。在 SSH 终端里依次执行这几条命令cat /etc/redhat-release uname -mcat /etc/redhat-release会显示当前系统版本比如 CentOS Linux release 7.9.2009 (Core)。uname -m会显示机器架构绝大多数服务器是 x86_64但如果你用的是 ARM 架构的国产机器或者树莓派类似的板子这里会显示 aarch64。向日葵的 Linux 版对 x86_64 的支持是最成熟的aarch64 部分版本也有但安装包必须对应混着装必挂。接下来看网络环境。向日葵的客户端需要和向日葵云端服务器通信如果服务器不通外网那装完之后也没法完成连接。用最简单的命令测一下curl -I https://www.oray.com能返回 HTTP 响应头说明外网通路基本没问题。这一步很重要特别是那些部署在客户内网、只开放了特定端口出站的机器如果不提前确认后面排查起连不上的问题会非常痛苦。1.3 为什么不推荐 VNC几个方案放在一起看你就能做决定了我当时的处境是无桌面、无公网 IP、只有 SSH。如果你也遇到类似的限制可以先把常见方案摆在一起对比一下再决定用哪个。方案是否需要图形会话是否需要公网IP配置复杂度内网穿透能力SSH否一般需要公网或内网可达低弱需自建跳板X11 Forwarding需要X服务一般需要公网中弱VNC需要需要端口映射高弱frp VNC需要不需要公网但要有中转服务器高强但需要自己搭向日葵被控端可无桌面远程看画面需要X组件不需要低强云端中转看表格就明白了。VNC 这类传统方案本身没有穿透能力要暴露到外网必须额外配置端口映射或者搭 frp 跳板机配置链路很长。向日葵把识别码和云端调度打包在客户端里相当于把穿透这件事做成了默认能力对没有公网 IP 的机器是天然友好的。不过我也要说清楚向日葵是商用软件个人使用免费版就能满足基本的远程桌面、远程文件功能但它在 Linux 端的体验和 Windows 端有差距比如某些版本不提供完整的命令行帮助文档远程画面在某些极简环境下还可能出现黑屏。这些坑我下面会专门讲你现在先记住一句话向日葵适合的是快速、省事、不折腾网络的场景而不是追求极致的图形性能的场景。2. 下载安装包没有浏览器的服务器怎么把 rpm 拿下来2.1 官方渠道获取正确的 rpm 包纯命令行环境最大的问题是没有浏览器你不能像在 Windows 上那样打开官网下载页再点下载。但换个思路你在任何一台能上网的电脑上打开向日葵官网的下载中心找到 Linux 版选择对应的发行版和架构右键复制下载链接然后拿到服务器上用 wget 或 curl 去拉。这里特别提醒一句千万不要图省事在一些第三方软件站或者某个博客的附件里下安装包。向日葵 Linux 版的安装包是编译好的二进制来历不明的包很可能被塞进额外的东西尤其是这种跑在服务器上的远程控制软件一旦被动手脚等于把服务器后门交到别人手里。我从来只认准官网下载页的 CDN 链接。官网下载页里 Linux 版的 rpm 包命名一般类似SunloginClient-15.2.0.63064.x86_64.rpm版本号会随官方更新而变化不必纠结数字本身。你只需要确认两件事后缀是.x86_64.rpm并且匹配当前系统的架构。拿到链接之后先别急着下载在服务器上用curl -I验证一下链接是否有效curl -I https://官方下载链接/SunloginClient-15.2.0.63064.x86_64.rpm返回 200 就可以放心用 wget 拉取。这个习惯能帮你避开很多坑比如官网改版后链接失效、或者 CDN 临时抽风提前验证比下载到一半才发现要省时间得多。2.2 装依赖前先修好 yum 源CentOS 7 停更后的第一个坑这一步是我这次安装过程中遇到的最大的坑也最容易被教程忽略。CentOS 7 官方已经停止维护了默认的 yum 源地址mirrorlist.centos.org基本处于失效状态直接执行任何需要联网装依赖的命令都会报类似这样的错误Could not retrieve mirrorlist http://mirrorlist.centos.org/?release7archx86_64repoosinfrastock error was 14: curl#6 - Could not resolve host: mirrorlist.centos.org; Unknown error向日葵的 rpm 包安装时虽然自带了很多库但依然可能有依赖需要从 yum 源里拉取所以源不修好后面的yum localinstall可能直接失败。我在第一次操作的时候就被这个报错卡了十几分钟最后把源切到 Vault 才解决问题。所谓 Vault就是 CentOS 官方存放历史版本软件包的仓库。CentOS 7 停更后所有旧版本的软件包都被归档到这个地址。你只需要修改/etc/yum.repos.d/CentOS-Base.repo把里面的mirrorlist行注释掉baseurl指向 Vault 就行了。大致配置长这样[base] nameCentOS-$releasever - Base baseurlhttps://vault.centos.org/7.9.2009/os/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [updates] nameCentOS-$releasever - Updates baseurlhttps://vault.centos.org/7.9.2009/updates/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 [extras] nameCentOS-$releasever - Extras baseurlhttps://vault.centos.org/7.9.2009/extras/$basearch/ gpgcheck1 gpgkeyfile:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7如果你在国内服务器上访问 Vault 速度很慢就把baseurl替换成国内云厂商提供的 Vault 镜像路径原理一模一样。改完以后执行yum clean all yum makecache等到makecache能正常跑完说明源已经可用了。这一步是后续所有安装操作的前提我建议你无论如何先处理掉。2.3 用 wget 拉包并做基础校验源修好之后回到下载环节。在服务器上创建一个临时目录下载 rpm 包mkdir -p /tmp/sunlogin cd /tmp/sunlogin wget https://官方下载链接/SunloginClient-15.2.0.63064.x86_64.rpm下载完以后用ls -lh看一下文件大小再用file命令确认文件格式ls -lh SunloginClient-*.rpm file SunloginClient-*.rpm正常输出里会出现RPM字样并且标明x86_64架构。如果你看到的是一个 HTML 文件或者 zip 压缩包说明你复制的链接错了或者被网站防火墙挡了返回了一个页面而不是安装包本体。有条件的话还可以做一下 SHA256 校验和官网给出的哈希值比对。这一步不是必须的但对安全要求高的生产环境值得做。我个人的习惯是至少把校验码保存下来万一后续排查问题需要确认文件完整性时能用上。3. 从 rpm 到可连接安装、启动、拿识别码3.1 用 yum localinstall 一次解决依赖安装这一步我强烈建议用yum localinstall而不是直接rpm -ivh。很多教程喜欢写rpm -ivh SunloginClient-xxx.rpm但 rpm 命令本身不具备自动解决依赖的能力它只会告诉你缺什么库然后让你手动一个个去装。向日葵 Linux 版依赖的库很可能包括libappindicator-gtk3、libXScrnSaver、xdotool这类系统组件在一个最小化安装的 CentOS 7 上缺三四个依赖是家常便饭手动补起来非常痛苦。而yum localinstall会把本地 rpm 包的依赖需求自动交给 yum 仓库去解决它在本地安装这个包的同时会自动下载并安装所有缺失的依赖。命令很简单cd /tmp/sunlogin yum localinstall -y SunloginClient-*.rpm如果你在 2.2 节已经把 yum 源修好了这一步通常能顺利跑完。如果中间报错提示某个依赖找不到先确认一下源是不是没配置好而不是急着去网上搜强制安装的方案。强制跳过依赖在远程控制软件这种场景下非常危险装到一半缺库的话后续服务根本起不来。我那次安装的时候就看着终端里自动补装了libICE、libSM、libXScrnSaver、libappindicator-gtk3等一堆东西整个过程无脑等它跑完就行。装上之后安装路径一般在/usr/local/sunlogin这里面有主程序、库文件和日志目录。3.2 启动服务并确认进程在跑向日葵的 Linux 版安装完成之后会注册一个系统服务。不同版本的服务名可能有差异我见过runsunloginclient也见过sunloginclient.service。别去猜服务名先查一下最保险systemctl list-unit-files | grep -i sunlogin看到类似sunloginclient.service的输出之后启动并设置开机自启systemctl enable --now sunloginclient然后确认服务状态systemctl status sunloginclient如果你看到active (running)说明守护进程已经起来了。为了保险再用ps看一眼实际进程ps -ef | grep sunlogin这一步的作用是确认进程确实在跑因为某些情况下 systemd 显示 active但进程因为缺库闪退了靠ps能发现真相。如果你发现服务起不来先看日志排查方向在第 4 节我那里会展开讲。3.3 没有图形界面时怎么拿到识别码和设置验证码装完之后远程连接最关键的两个东西是识别码和验证码。识别码相当于这台机器在向日葵网络里的门牌号验证码是开门密码。在有图形界面的场景里桌面上会有一个向日葵主窗口显示这两项但我们这环境没有图形界面所以必须靠命令行工具来获取。向日葵安装目录下有主程序一般是/usr/local/sunlogin/bin/sunloginclient。不同版本支持的参数不一样先看帮助文档/usr/local/sunlogin/bin/sunloginclient --help常见选项会包含类似--getsn或-c用来获取本机识别码以及类似--setpasswd用来设置验证码。以我使用的版本为例/usr/local/sunlogin/bin/sunloginclient --getsn输出结果是一串纯数字大概 9 到 10 位这就是本机识别码。再设置一个验证码/usr/local/sunlogin/bin/sunloginclient --setpasswd 你的验证码设置完成之后你可以把识别码和验证码发给需要远程连接的人他们在自己的 Windows/Mac/Linux 向日葵客户端里输入这两个信息就能连上这台服务器。这里有个容易混淆的点向日葵不光支持输入识别码验证码连接还支持登录同一个向日葵账号后把设备加到自己的设备列表里从云端设备列表直接发起远控。如果你走账号体系的方式验证码就不一定是必要的但第一次配置我还是建议设置一个验证码兜底后面登录绑定之后再做调整。4. 连不上、黑屏按这三层思路排查4.1 服务状态和日志systemd 日志才是第一现场装完向日葵之后第一次连接失败其实是常态尤其是纯命令行环境各种隐藏问题都会冒出来。我自己见过最多的是两种情况一是服务根本没起来二是连上了但画面是黑的。排查第一个问题不要瞎猜直接看日志。向日葵的服务日志既可以通过 systemd 获取也会写到自己的日志目录里。先用 journalctl 看系统服务日志journalctl -u sunloginclient -f如果日志里出现类似Failed to initialize、Cannot open shared object file、segfault这样的关键字多半是运行库缺失或者版本冲突回到 3.1 节重新处理依赖。向日葵自己的日志一般在/usr/local/sunlogin/logs目录下文件名通常包含当天的日期。这个日志文件记录的信息比 systemd 更细比如云端连接状态、识别码是否成功登记、虚拟网卡是否启动等。我强烈建议你在排查的时候两个日志配合着看先看 systemd 有没有致命错误再看向日葵自己的日志确认业务状态。我遇到过一个比较隐蔽的情况服务日志显示一切正常识别码也能拿到但对端就是连接超时。后来发现我机器上跑着一个旧版本的向日葵残留进程把服务端口占住了新装的服务虽然起来了但真正处理连接的还是那个旧进程。杀掉旧进程、重启新服务后一切恢复正常。所以如果你也碰到日志正常但连不上别忘了ps -ef | grep sunlogin看一眼是不是有多个进程在打架。4.2 防火墙和 SELinux 到底影响什么你可能会想向日葵不是走云端中转吗那是不是意味着服务器防火墙可以完全不管其实不完全对。向日葵在工作时客户端会主动向云端建立出站连接所以一般情况下你不需要在服务器上放行任何入站端口防火墙默认拒绝入站并不会阻止向日葵正常工作。但是如果防火墙规则把出站流量也做限制只允许 80/443 等特定端口那向日葵云调度用的端口可能被挡住表现就是一直显示正在连接。排查的时候先看当前防火墙状态firewall-cmd --list-all确认默认 zone 的 outbound 没有被额外限制。大多数云服务器默认是不会限制出站的所以你重点检查的是有没有安全组层面的出站规则。我在给客户处理问题的时候就遇到过一台服务器安全组只放行了 SSH 端口向日葵连不上最后查了一圈发现是云平台安全组把出站全拦了放行之后立刻就连上了。另一个经常在 CentOS 7 上出问题的东西是 SELinux。默认 enforcing 模式下向日葵的进程可能被限制访问某些资源导致虚拟网卡起不来或者连接异常。排查方法很简单临时关闭 SELinux 测试一下setenforce 0如果关掉之后连接恢复正常那就基本锁定是 SELinux 的拦截。这时你需要在/etc/selinux/config里把SELINUXenforcing改成permissive让策略不再拦截同时保留日志记录方便后续观察。有些人会直接改成 disabled但我不建议因为这会彻底关闭 SELinux 的保护对生产环境来说风险太大。4.3 无桌面环境下的显示依赖为什么连上了却是一片黑屏这是我觉得最值得展开讲的一个问题因为教程里很少提到。向日葵在 Linux 上远程控制时被控端必须有对应的图形画面可以投递哪怕那张画面本质上是服务器自己启动的虚拟显示。如果你的 CentOS 7 是最小化安装连 X Window 都没有那么远程连过来看到的很可能是一片黑屏或者干脆提示远程桌面无法创建。很多人遇到黑屏以后第一反应是怀疑向日葵坏了其实问题出在目标机器缺少图形环境。解决方法是在服务器上补装 X 相关组件。最省事的方式是直接安装 X Window System 组包yum groupinstall -y X Window System这个组包会装上一整套 X 服务相关组件体积比较大几百 MB 到 1GB 左右但一劳永逸。如果觉得太重可以只装最小必需件yum install -y xorg-x11-xauth xorg-x11-server-Xvfb xorg-x11-utils我个人倾向于前者因为向日葵的远程画面最终需要一个可交互的图形会话只装一个Xvfb虚拟显示虽然能投递画面但没有完整的窗口管理器和基础桌面环境远程看了也没什么用。你既然要在服务端看图形界面那至少让服务器具备一个可用的 X 环境。装完之后重启向日葵服务systemctl restart sunloginclient再从对端发起连接测试正常情况下就能看到向日葵生成的虚拟桌面画面了。如果你希望画面里有一个完整的桌面环境后续还可以装 GNOME 或者 XFCE但这取决于你的实际需求演示一个图形工具的话X 环境加那个工具本身的界面基本就够了。5. 装完后的自启、升级与卸载5.1 开机自启和重启后的验证向日葵作为远程控制软件最怕的就是服务器重启之后服务没起来你又不在现场只能干瞪眼。所以只要确认服务能正常工作第一件事就是确保它开机自启。在 3.2 节里我已经用了systemctl enable --now sunloginclient这句命令同时完成了设置开机自启和立即启动。但为了保险建议重启一次服务器验证整个链路是否完整reboot重启回来之后重新 SSH 登录按这个顺序检查systemctl is-enabled sunloginclient systemctl status sunloginclient ps -ef | grep sunlogin然后重新执行一次获取识别码的命令确认识别码没有变化。这里有个容易忽略的细节向日葵的识别码跟机器的硬件标识和系统状态绑定只要你不重装系统、不更换网卡识别码一般不会变。但有些虚拟化环境下网卡的 MAC 地址可能随重启发生变化识别码就会变。如果你发现重启后识别码变了先检查一下网卡是不是被 DHCP 换地址导致必要时在网卡配置里固定 MAC。5.2 升级覆盖与日志位置向日葵会不定期发布新版本官方一般会修复安全漏洞和连接稳定性问题所以定期升级是应该的特别是向日葵这种暴露在公网连接场景下的软件。升级过程很简单去官网下载新版本的 rpm 包然后直接执行yum localinstall -y SunloginClient-新版.x86_64.rpm这个命令会覆盖安装新版同时保留原有的配置文件、识别码绑定关系和设备列表中的名称。但我不建议你手贱删掉/usr/local/sunlogin目录再装新版那相当于重装系统识别码会变还得重新绑定。日志方面向日葵的运行日志在/usr/local/sunlogin/logs升级一般不会清空这个目录但旧日志会比较多建议定期手动清理find /usr/local/sunlogin/logs -name *.log -mtime 30 -exec rm -f {} \;这条命令会删除 30 天前的日志文件避免日志把磁盘占满。5.3 不想要了怎么干净卸载卸载向日葵比安装简单但也要按顺序来不然容易留下残留进程。先停止服务并关闭自启systemctl stop sunloginclient systemctl disable sunloginclient然后通过 rpm 查询确认包名rpm -qa | grep sunlogin卸载rpm -e SunloginClient这里要注意rpm 卸载可能会提示某些配置文件的归属问题如果报错加上--nodeps强行卸载是可以的但前提是你确认不再使用这个软件了。卸载完成后检查一下/usr/local/sunlogin目录是否还在这个目录是软件的数据目录属于安装时自动创建的rpm 卸载不一定删干净需要手动清理rm -rf /usr/local/sunlogin最后再检查一遍进程和端口确保没有残留ps -ef | grep sunlogin ss -tnlp | grep sunlogin干干净净不留尾巴。装向日葵这件事本身不难真正难的是那些隐藏的环境问题yum 源失效、依赖缺失、SELinux 拦截、没有 X 环境导致黑屏。把这些坑挨个趟平之后你会发现纯命令行部署一个远程控制软件其实也就十来分钟的事。我再分享一个实操习惯向日葵装完、服务启动之后不要急着把服务器扔在一边最好立刻用手机上的向日葵客户端或者另一台电脑发起一次测试连接验证画面、键盘、鼠标全部正常后再关机收工。我在实际运维中吃过亏装完当天没测第二天客户远程连接时才发现黑屏最后又花了大半个小时补装 X 环境白白耽误了事情。先测一次后面就稳了。