ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows远程关机Linux主机:SSH连接、状态检查与安全清理实战

Windows远程关机Linux主机:SSH连接、状态检查与安全清理实战 室友那台装了Debian的台式机又在嗡嗡地转人却早跑没影了。以前我遇到这种情况只能干瞪眼笔记本上只有Windows对面那台Linux主机像是另一个世界的东西。后来我认真把Windows自带的SSH客户端翻出来一条命令连上去看了一眼负载、查了在线用户、顺手清了几个G的日志和临时文件确认没有任务正在跑最后给了一个干净利落的shutdown。整个过程不到十分钟风扇安静下来同学回来还问我是不是动过他的电脑我说是的帮你关了机还顺手做了轮保养。他说那太好了难怪回来摸了一下机箱是凉的。这篇文章就是这段经验的完整拆解Windows侧用什么方式连上Linux、连上之后先看什么再动什么、怎么在“帮人关机”这件事上不坑到别人也不坑到自己。不需要装重量级软件不需要额外买服务器也不需要多高的Linux水平Windows 10/11自带OpenSSH就能搞定照着命令走就能完成一次安全可靠的远程关机保养。你面对的是宿舍里的Linux机箱、实验室的GPU服务器还是云上的一台虚拟机流程都完全一样学会了就有一种“随手能帮人收电脑”的基本功。1. 为什么说“会连接”才是远程保养的第一步Windows和Linux之间有一个天然的连接门槛但这个门槛实际只有一条SSH命令那么高。SSH全称是Secure Shell你可以把它理解成一把只有对方系统认得的钥匙只要Linux那边把SSH服务打开Windows这边拿着一把对的钥匙把密码或密钥递过去就能打开一个安全的远程终端窗口之后的命令跟在机器前敲没有任何区别。为什么非要走SSH而不是用微信让同学报一串命令、或者等到了现场再处理因为远程场景下你看不到屏幕而“关机保养”最怕的就是闭着眼睛操作。SSH能让你在动手之前先完整观察这台Linux的状态谁正在登录、负载怎么样、磁盘还剩多少、有没有跑了一半的任务。这些信息不拿到手后面的清理和关机都像盲人摸象。很多人以为保养就是“清理垃圾然后关机”其实顺序反了。正确逻辑是先连接再观察再清理最后才关机。连接是第一步也是决定后面所有动作能不能做对的前提。只要连接通道是通的Linux世界的大门就算打开了。这个能力的复用场景比想象中多。宿舍里总有一台常年开着的Linux台式机当NAS、当下载机、当游戏服务器实验室里那台跑模型训练的GPU服务器更是不敢轻易断电朋友家里的树莓派、软路由、监控盒子底层也基本全是Linux。学会Windows连接Linux之后以上这些东西你都能隔空看一眼状态、做个简单维护、在确认安全的情况下帮它关机。2. 连接之前先把这三件事查干净我第一次上手就吃过“连了半天连不上”的亏后来总结出一个固定套路只要按顺序检查完基本都能顺利连上。2.1 目标Linux有没有装并启动SSH服务很多Linux发行版默认不装SSH服务端装完系统之后只有客户端没有服务端你在Windows这边喊破喉咙对面也听不见。所以在连接前先想办法在Linux本机上确认一下。# Debian/Ubuntu系 systemctl status ssh # 如果提示找不到服务先安装 sudo apt install openssh-server sudo systemctl enable --now ssh # 红帽系Fedora/RHEL/CentOS类 systemctl status sshd sudo dnf install openssh-server sudo systemctl enable --now sshdsystemctl status输出里看到绿色的active (running)说明服务已经起来了。enable --now的意思是现在启动并且以后开机自启。这一步很关键因为远程关机之后如果想再开机你大概率不希望还得跑去现场按电源然后把SSH再手动启动一遍。2.2 搞清Linux的IP地址SSH连接需要目标的IP就像寄快递需要地址。在Linux本机跑一下ip aeth0、ens33、wlan0这些网卡下会有inet一栏类似192.168.1.23这样的就是局域网IP。如果在虚拟机里还要注意网络模式桥接模式一般可以拿到和宿主机同一网段的IPNAT模式则是另一个网段Windows能不能直接连取决于你的虚拟网络设置这个方向想清楚就行。在Windows上验证两个机器能不能互通可以开一个PowerShell窗口ping 192.168.1.23能通说明网络层没问题接着就查端口。Test-NetConnection 192.168.1.23 -Port 22TcpTestSucceeded显示True说明22号端口已经对你敞开SSH服务的通道是通的。这一步能帮你区分问题在网络层还是在服务层是非常实用的排障习惯。2.3 Windows侧选哪种连接工具先说结论Windows 10以上系统自带的OpenSSH客户端就够用完全不用再装东西。打开PowerShell或者CMD窗口直接敲ssh 用户名192.168.1.23比如用户叫studentIP是192.168.1.23那就是ssh student192.168.1.23第一次连接时系统会提示你确认目标主机的指纹这是SSH防中间人攻击的机制输入yes回车即可。之后会要求输入密码输Linux用户密码就行密码输入时屏幕上不会显示任何字符这是正常现象不要以为键盘坏了。如果觉得Windows自带终端太朴素可以装Windows Terminal多标签页、字体渲染、复制粘贴都更顺手。老牌的PuTTY也可以绿色免安装版本一堆尤其在某些精简版Windows上连OpenSSH都没有的时候PuTTY就是保底方案。我自己日常主力还是Windows Terminal加OpenSSH因为多台服务器开多个标签页非常清爽而且命令和纯bash环境完全一致。有个细节值得提醒如果你之前用某个工具连过这台机器后来Linux系统重装了或者换了网卡Windows会提示Host key verification failed这是因为对方指纹变了而你本地还留着旧记录。解决办法是删掉旧记录再连ssh-keygen -R 192.168.1.23这个命令在Windows上同样可用删除的known_hosts记录是之前这台IP对应的指纹删完再ssh就会重新让你确认新指纹属于正常安全提示不用慌。3. 连上之后千万别急着关机先体检许多人拿到远程终端的第一反应是赶紧敲shutdown这其实违背了“保养”的本意。关机是最简单的一步难的是判断现在能不能关。下面我按体检顺序来。3.1 看谁在线、每个人在干什么首先敲一个命令组合把机器当前的概况拉出来w uptimew命令特别实诚它会告诉你系统现在几点、已经运行了多久、当前有多少用户在线、过去1分钟/5分钟/15分钟的平均负载。后面的每一行是每个登录用户的会话信息包括从哪个IP登录的、登录多久了、当前正在执行什么命令。当头三列出现load average: 1.20, 0.80, 0.50这样的数字别急着觉得负载高要结合CPU核数判断。一个四核机器负载只要长期徘徊在4以下都算正常水位短期冲到1-2根本不用紧张。关键是看趋势如果五分钟内从0.3爬到1.5说明有什么东西正在变忙这时候更要查清楚再决定动不动。3.2 内存、CPU和启动时间接下来看内存和CPUfree -h topfree -h里注意看available这一列这才是系统实际还能分出去的内存比used数字更有参考价值。Linux吃内存有个特点它会尽量把空闲内存拿来当缓存used看起来很高但available还有富余这是健康状态不是内存泄漏。top则是动态刷新视图按大写P可以按CPU使用率排序按大写M可以按内存排序一眼就能找出当前最占资源的进程。想退出就按q。如果机器上装了htop体验更舒服操作逻辑类似但界面更现代还能用F5看进程树。启动时间也要看命令是uptime -s如果输出显示这台机器已经跑了200多天说明你已经很久没帮它“保养”了。顺手可以通过last reboot命令查看历史重启记录判断上次重启是什么时候、是谁动的手避免误判。3.3 磁盘空间和挂载情况磁盘是Linux保养的重灾区。先看整体df -hT-T会显示文件系统类型-h是人性化单位。重点关注根分区/的Use%是否接近100%以及有没有外挂数据盘快要满了。根分区满是非常常见的故障源临时文件、日志、Docker镜像都能把根分区塞满而一旦满了很多服务直接罢工。接着看物理分区和设备lsblklsblk输出像一棵树能看出sda、nvme0n1这些盘怎么分的区、挂载在哪里。如果机器挂着NAS或远程共享目录可以查一下mount | grep -E nfs|cifs|smb看到nfs/cifs共享很正常这个场景下记住一点对网络挂载盘做清理要格外克制因为你删的很可能是别人正在用的共享文件这个意识比技术本身更重要。3.4 找出那些“不能关机”的任务明确告诉你远程关机前不看进程列表的都属于半吊子操作。一份靠谱的进程检查是这样ps aux --sort-%cpu | head -20 ps aux --sort-%mem | head -20第一条按CPU占用率从高到低列出前20个进程第二条按内存排。重点看那些CUP或MEM列数值很高、且COMMAND看着像正经任务的家伙python训练脚本、gcc编译进程、ffmpeg转码、rsync同步、wget下载这些一旦被关机会直接中断赶工的同学可能因此一晚上白干。如果发现有人通过tmux或screen挂着会话也要谨慎。那些会话里跑的可能是长任务shell被关掉后会话不一定会断但进程本身还在比较稳妥的做法是查清楚再决定。总之关机前多花三分钟看进程能避免很大一部分“关机一时爽同学追着打”的悲剧。4. 按这个顺序做一次关机前大扫除体检完确认可以操作就可以做保养了。我每次远程维护都会做下面几件事按风险从低到高排尽量做到“删了也可恢复、不清也没多大损失”。4.1 日志文件夹无脑删会后悔控制体积才正确systemd日志是最值得先动手的。很多人不知道日志也会把磁盘挤爆而一条错误配置反复刷日志的情况非常常见。先看看日志占了多少空间journalctl --disk-usage如果显示1.5GB这类数字但又不想动最近几天的日志可以通过时间窗口清理sudo journalctl --vacuum-time3d这个命令会删除3天前的系统日志留下的都是最近的内容方便排查问题。想从源头限制日志体积还可以修改/etc/systemd/journald.confSystemMaxUse200M保存后重启journaldsudo systemctl restart systemd-journald这样系统日志最大也就200M不会无声无息地把根分区吞掉。传统/var/log下面的旧日志一般交给logrotate轮替没必要手工乱删。曾见过有人直接把/var/log/auth.log删了结果后续排查登录问题时两眼一抹黑。克制一点日志该留的留该滚的滚。4.2 apt缓存、孤儿依赖和旧内核Debian系机器上包管理器缓存非常占地方。清理方式sudo apt clean sudo apt autoremoveapt clean清的是下载的deb安装包缓存autoremove会剥掉不再被依赖的库文件。注意autoremove有时会列出一堆看起来眼熟的东西先看清楚再按y实在不放心可以先跑apt --dry-run autoremove看看它准备删谁觉得没问题再真删。旧内核清理属于进阶保养。Linux会保留多个内核版本每更新一次内核就会留下一个时间久了/boot分区可能被挤爆。先看当前正在用的内核uname -r然后列出已安装的内核包dpkg -l | grep linux-image把除了当前版本和最近一两个稳定版之外的老内核清掉sudo apt purge linux-image-5.4.0-xxx-generic这里的xxx要替换成实际查询到的老版本号。红帽系则是sudo dnf remove --oldinstallonly或手动dnf remove内核包。删除前务必确认uname -r那个版本还在否则可能连系统都起不来远程操作直接变大型翻车现场。4.3 用户缓存与临时目录用户级缓存尤其是~/.cache经常是几个G起步。看一下再决定删不删du -sh ~/.cache如果你当前登录的用户就是机器的主要使用者确认缓存目录下没有正在用的重要文件可以直接rm -rf ~/.cache/*对我来说~/.cache里的东西基本可以安全清理最坏情况是下次打开软件会慢一点重新生成缓存。/tmp目录的处理原则是要区分新旧。不要一把梭直接rm -rf /tmp因为可能有正在运行的进程把临时文件放在里面。更稳妥的姿势是按访问时间清理超过7天的文件find /tmp -type f -atime 7 -delete这样当前活跃的临时文件不会被动过期垃圾则会被清走。图形桌面环境的回收站目录也会占地方路径一般是~/.local/share/Trash/files看看大小该清就清。4.4 磁盘大户排查用工具而不是猜如果你只是想把磁盘清理一下强烈推荐先装个ncdu这是一个TUI界面的磁盘分析工具按目录大小排序交互操作和top类似比手动敲du半天直观太多sudo apt install ncdu然后sudo ncdu /home方向键上下移动回车进入目录d键标记删除q键退出。界面上每个目录当前大小一目了然一眼就能看出谁在磁盘里兴风作浪。不用ncdu也可以用这条命令快速扫一遍sudo du -h --max-depth1 /home 2/dev/null | sort -h | tail -10如果机器上跑着Docker记得看一眼docker system df它会把镜像、容器、卷、构建缓存的大小都列出来。要不要清理取决于实际情况但有一点非常严肃docker volume prune要三思而后行卷里面往往是数据库数据看着是“清理”删掉就是事故。4.5 系统更新关门前夜不要手贱很多人觉得保养就该顺便升个级但我劝你关机前不要跑大规模系统更新。apt upgrade很可能拉起一大堆新包占磁盘、占网络还会在结束后提示“需要重启才能生效”你要是刚好接下来就关机等于把系统置于半更新状态下次开机可能带来惊喜。更稳的做法是只做sudo apt update看看有多少包可以升级把这个信息告诉同学或者记录在案等他下次真正要用机器时再选个空闲时段升级。保养的度在于不制造新的风险而不是把所有维护动作一把梭。5. 关机本身不复杂关机前判断才见功底现在到了“关机”这个正戏但请给自己留三分钟做最后确认。5.1 再查一遍在线用户和正在跑的任务关机前把w和ps再刷一遍和体检时的结果对照。如果发现突然多了个在线用户或者多了一个正在下载的任务说明有人在用那就别急着关。这时候可以发个广播消息wall 系统将在5分钟后关机如有未保存文件请立即处理wall命令会向所有登录用户终端广播这段消息给可能正在用的人一个缓冲。虽然宿舍场景下对方可能根本不看终端但该做的通知动作要做到。5.2 确认没有数据库或长任务数据库在内存里有WAL日志和缓存正常关机它们会安全落盘但如果你发现有正在进行的备份、迁移、大批量写入任务最好等它干完。判断方法是查看进程关键词ps aux | grep -E mysqld|postgres|redis-server|rsync|dd |nohup|tmux|screen有相关结果就再花几分钟了解任务性质不要抱着“反正是一次正常关机”的心态硬来。远程维护的原则永远是宁可少做不能做错。5.3 shutdown命令的正确姿势确认一切安全后关机命令本身很简单sudo shutdown -h now-h是halt的意思表示关机并停机。更稳妥的做法是延迟几分钟关给系统一点缓冲时间sudo shutdown -h 5 System maintenance, going down in 5 minutes这个命令会在5分钟后关机同时广播消息。如果需要取消延迟关机可以用shutdown -c另一条常见的命令是sudo poweroff它和shutdown -h now在大多数systemd系统上效果一样走的是同一套关闭流程。不要随手直接按电源键甚至拔电硬断电会跳过硬关机流程文件系统缓冲区里的数据可能来不及落盘运气不好会留下脏文件系统。systemd下的正常关机流程是先停止所有用户服务再卸载文件系统sync刷写缓冲区最后才给硬件下电。关机前如果你是个偏执型选手可以手动执行一下sync这个命令意思是“把内存缓冲区的数据强制刷到磁盘”执行完再shutdown会更安心虽然正常关机流程里本来就有同步这一环但多刷一次没有坏处。5.4 关完机怎么再开机远程关机最尴尬的事莫过于第二天发现没法远程开机。最简单的方案是关机前你明确知道“短时间内没人需要用这台机器”关了以后需要人跑到现场按一下电源键。宿舍场景里很好沟通但如果是实验楼里的服务器没人愿意跑一趟。这里有一个补救手段叫Wake-on-LAN也就是网卡唤醒。它要求主板BIOS里开启Wake-on-LAN功能系统里网卡驱动支持而且机器使用的是有线网卡同一局域网内用魔术包把网卡唤醒。Windows下有现成的小工具Linux下也可以用etherwake这类命令行工具发魔术包etherwake -i eth0 AA:BB:CC:DD:EE:FF其中AA:BB:CC:DD:EE:FF是目标网卡的MAC地址可以提前在Linux上查好ip link但坦白讲WOL在实际宿舍场景里不算可靠无线网卡基本都不支持某些主板默认关闭跨网段唤醒更是麻烦。所以我的建议是把WOL当成一个“有就最好没有也别强求”的延伸能力真正能让远程关机放心实施的仍然是“确定接下来没人用这台机器”这个前提条件。6. 我踩过的坑希望你能直接跳过去远程这条路我走得不算少下面这些坑都是实打实踩过的写出来给你当参考。6.1 连不上时按顺序排错不要瞎猜有一次我在宿舍死活连不上实验室的Linux第一反应以为是IP变了后来发现是实验室路由器开了AP隔离同一个WiFi下设备互访被物理隔离了。遇到“连不上”按这个顺序查五分钟内基本能定位Windows侧先ping目标IP不通就检查网络环境和IP是否正确。如果ping通了但SSH连接卡住或超时检查22端口是否放行PowerShell用Test-NetConnection。确认SSH服务确实在跑systemctl status ssh。看防火墙UFW的话sudo ufw status有SELinux的系统还要考虑规则限制。这几条用熟了之后很多“莫名其妙连不上”其实都只是网段隔离、SSH服务没开、防火墙挡端口这老三样。6.2 重装系统后的指纹冲突有次我给同学的Linux重装完系统过几天他用Windows再连报host key verification failed他很慌以为是安全问题。其实是重装系统后SSH服务生成了新的主机密钥而Windows本地还留着他旧系统的指纹。删掉对应IP的旧指纹就好ssh-keygen -R 192.168.1.23这个机制本身是安全设计别为了图方便去关掉只要知道怎么重置就行。6.3 最疼的一次帮人“清理”Docker卷有段时间我觉得自己很懂保养看到Lab机器上Docker占了几十个G顺手docker system prune -a了一下还带--volumes参数。结果第二天带我的学长发现数据库数据没了因为那个数据库用的正是匿名卷。幸好他有备份但那次真的把我教育了prune和rm这类命令尤其是卷级别操作永远不要凭感觉执行。现在我的习惯是任何删除前先搞清楚删的是什么拿不准就用dry-run或者干脆查完报告给机主决定。6.4 关机前没跑nvidia-smi差点弄熄别人的训练任务宿舍那台带显卡的机器经常有人用来跑深度学习。有一次我远程上去看负载不高没细想就要关机同学冲过来拦住我“老子的batch训练还在GPU上呢。”从此我养成一个习惯只要目标机器带N卡关机前必须先看nvidia-smi看到进程里有python训练任务就坚决不关或者至少确认任务是否需要很久。跑在GPU上的任务往往比CPU任务更隐蔽因为CPU占用率不高容易被忽略。6.5 不同发行版的包管理器不要混着用Debian系用apt红帽系用dnf或yumArch系用pacman这本来是常识但新手容易在Ubuntu上敲dnf、在CentOS上敲apt。遇到这种情况系统会提示找不到命令倒不至于损坏系统但在红帽系上用apt装包可能会导致很奇怪的依赖混乱。远程帮人保养前先确认发行版cat /etc/os-release一眼看清是什么系统再决定用哪套包管理命令。就这一条能帮你避免很多自我怀疑。6.6 关机之后风扇还在转遇到过关机之后主机电源灯灭了但风扇还在转的情况。很多人会吓一跳其实常见原因是机器进入了某种睡眠/挂起状态而不是真正关机尤其是某些笔记本开启了深度睡眠待机模式。远程场景下只要SSH已经断开命令行无法再敲很难判断它到底睡过去了还是关掉了。我的处理原则是如果是真正保养结束要离开我会在关机前顺手把日志方向留好第二天同学开机后能看journalctl --list-boots里的记录确认关机时间也便于倒查。至于睡眠和关机的区别等下次站在机器面前按电源时总会搞明白的不影响远程保养的操作价值。回到最开始的问题Windows连Linux这件事难吗其实学会一条ssh命令就可以跨过门槛再加上几条体检、清理、关机的命令就是一个可以放心交给别人的远程关机保养流程。我现在帮同学处理这类事情最深的一条体会就是远程操作永远先看后动少删多看。保养不是炫技而是让别人回到宿舍时那台机器安安静静、干干净净地躺在那里像什么都没发生过一样。
返回列表