ARTICLE DETAIL

资讯详情

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

银河麒麟V10 SP1桌面版SSH服务安装配置与远程管理实战指南

银河麒麟V10 SP1桌面版SSH服务安装配置与远程管理实战指南 银河麒麟V10 SP1桌面版跑SSH服务这件事我问过身边不少同事第一反应都是“桌面机装什么SSH直接坐那儿操作不就行了”。但实际用下来你会发现一旦管理的麒麟机器超过三五台或者你需要在Windows主机上同时操作多台麒麟终端SSH就是绕不开的刚需。平时远程改配置、批量推送文件、帮同事排查系统问题都靠它。这篇文章我结合自己在一堆麒麟V10 SP1机器上折腾SSH的经历从安装、配置、免密到排错把能想到的坑都给你捋一遍。1. 安装前的准备工作1.1 先确认你的麒麟版本和CPU架构银河麒麟桌面版和服务器版的命令集、软件源策略有一定差异而V10和V10 SP1之间补丁包和一些系统组件的初始版本也不一样。SP1全称是Service Pack 1可以理解成V10的第一个大补丁版本内核、桌面环境、预装应用都有不同程度更新。安装SSH之前我建议你先确认一下当前系统的准确版本免得网上搜到的教程跟你机器对不上号后面操作全是坑。在终端里执行这三条命令基本就能摸清系统底细cat /etc/os-release uname -a uname -m/etc/os-release能看系统名称和版本号uname -a看内核信息uname -m确认架构。银河麒麟V10 SP1目前最常见的是x86_64AMD64和aarch64ARM64两种架构你在下载软件包或者配置源时一定要注意区分。x86架构就和普通Ubuntu/Debian的习惯一样ARM架构在某些软件包上会有专属版本。提示我遇到过有人直接拿Ubuntu 20.04的源去给麒麟用结果装了一半提示依赖冲突。银河麒麟V10 SP1虽然兼容Debian系但官方源里的软件包都是经过适配的优先用系统自带源或者麒麟官方源最稳妥。1.2 检查网络连通性和软件源状态SSH服务本身不需要联网但安装openssh-server时如果本地没有缓存好的deb包就需要从软件源拉取所以源配置很重要。麒麟桌面版V10 SP1默认会配置官方的软件源但也可能因为部署环境是内网导致源不可达。先ping一下源地址或者随便一个内网可达的镜像站判断网络通不通ping -c 4 packages.kylin.com如果网络不通内网环境需要配置本地源或内网镜像源。这时候你需要看/etc/apt/sources.list和/etc/apt/sources.list.d/目录下的文件把地址替换成内网可用的源。我见过不少企业在内网自建了麒麟源镜像这种情况下直接改源地址就行。源确认没问题顺手把系统更新一下避免安装SSH时因为依赖库版本过旧而报错sudo apt updateapt update只是刷新软件包索引不会自动升级系统放心执行。如果这一步就报错先解决源的问题再往下走否则后面装SSH大概率也会失败。1.3 确认sudo权限和当前用户状态桌面版麒麟安装时创建的日常用户通常会被加入sudo组。但内网环境下有部分机器交付时被定制过普通用户的sudo权限可能被收走了。你可以在终端里试着执行sudo -l如果能列出可执行的命令说明sudo可用。如果提示当前用户不在sudoers中而你确实需要临时管理权限可以切到root用户处理。麒麟桌面版默认可能没启用root登录但单用户模式下是可以重置密码的。不过这篇文章先不展开系统救援那一套正常办公场景下装SSH这一步用sudo权限足够了。2. 安装SSH服务端2.1 用apt安装openssh-server确认环境和源都没问题之后安装SSH服务端其实就一条命令的事。打开终端执行sudo apt update sudo apt install openssh-server -y-y参数是自动确认安装省得中途还弹一个确认提示。麒麟V10 SP1的软件源里openssh-server版本一般都是8.x对日常使用来说完全够用。如果你后续要做高版本特性测试另说。安装完成后先确认一下版本顺便看服务是否已经自动起来了ssh -V sudo systemctl status sshssh -V输出的是OpenSSH客户端版本注意这是客户端的版本号。服务端版本你可以通过dpkg -l | grep openssh-server查看。systemctl status ssh能看到服务运行状态正常情况会显示active (running)。提示银河麒麟桌面版的服务名是ssh不是sshd。Ubuntu系和Debian系传统上服务名就是ssh而CentOS系的习惯是sshd。你在网上搜排错教程时如果对方用的是sshd命令执行时会提示Unit not found别慌换成ssh就好。2.2 启动服务并设置开机自启就算安装时服务自动启动了我还是建议你手动执行一遍启动和自启设置防止系统某些定制镜像把服务enable状态搞丢了。sudo systemctl start ssh sudo systemctl enable ssh sudo systemctl status sshenable的作用是创建符号链接让系统在开机时自动拉起服务对服务器场景来说这是必须的否则远程机器重启后你就连不上了那不是自己给自己找事。麒麟桌面版也会在图形界面右上角弹一些服务通知如果SSH服务异常有时候那里也会有提示。然后确认服务端确实在监听22端口sudo ss -tlnp | grep :22ss命令是查看网络套接字的-t只看TCP-l只显示监听状态的端口-n用数字显示地址和端口-p显示对应进程信息。正常你会看到sshd进程监听在0.0.0.0:22和[::]:22上前者是IPv4后者是IPv6。2.3 桌面版特有的可视化确认很多人装完SSH喜欢用systemctl看一眼就完事但麒麟桌面版有个好用的工具——在开始菜单搜索“服务”打开服务管理器找到ssh这一项可以看到运行状态和是否开机自启。虽然命令行够用但图形化界面在给不熟命令行的同事演示时比较方便。我之前帮一个客户处理远程连接问题他们坚持说服务没开结果我用服务管理器一看状态是running纯粹是防火墙拦住了。所以这里补充一句如果systemctl显示服务正常但客户端就是连不上优先查防火墙别在服务状态上纠结太久。3. 配置SSH客户端与免密登录3.1 从其他机器连接麒麟主机SSH服务端装好之后首要验证就是从其他机器连接这台麒麟桌面机。如果你从另一台Linux/Mac机器连接直接ssh 用户名目标IP如果你从Windows连接新版Windows 10/11自带OpenSSH客户端打开PowerShell或CMD同样可以执行ssh命令不需要额外装工具。但这里说句题外话Windows上我更推荐用PowerShell 7配合Windows Terminal比CMD体验好很多。目标IP怎么查在麒麟机器上执行ip addr show或者用hostname -I直接列出当前所有IPv4地址简洁明了适合给新手用。第一次连接时SSH会提示确认主机指纹输入yes回车即可然后输入用户密码。如果密码输入正确但连接被拒绝那就要进入下面几章的排查环节了。3.2 配置SSH密钥并实现免密登录密码登录适合偶尔连一次要是每天都要在几台机器之间切换反复输密码确实让人烦躁。配置SSH密钥后可以实现免密登录安全性和便利性都拉满。先在客户端机器上生成密钥对ssh-keygen -t rsa -b 4096 -C your_emailexample.com-t rsa指定密钥类型-b 4096指定密钥长度。虽然现在Ed25519算法更流行、安全性更高但在一些老版本OpenSSH上兼容性不如RSA我建议企业环境统一用RSA 4096避免某些老系统不认Ed25519密钥。当然如果你确认两端都是新版本ssh-keygen -t ed25519也完全没问题。生成过程会让你确认密钥保存路径默认~/.ssh/id_rsa还可以设置一个口令passphrase。我建议生产环境密钥最好设置passphrase并使用ssh-agent管理这样即使私钥文件泄露对方没有passphrase也拿不到。个人测试环境嫌麻烦可以留空直接回车。然后把公钥拷到麒麟机器上ssh-copy-id 用户名目标IP这个命令会把本地~/.ssh/id_rsa.pub的内容追加到目标机器的~/.ssh/authorized_keys文件里顺便把权限也设置好。执行后会要求输入一次用户密码之后再进行ssh 用户名目标IP连接就不再需要密码了。3.3 SSH连接工具的选型参考命令行SSH虽然够用但日常做文件传输、批量管理时工具能省不少事。我自己的使用习惯是命令行处理临时连接图形化工具处理大批量文件传输和复杂会话管理。除了Windows系统自带的SSH客户端Xshell、FinalShell在运维圈用得也比较多而VS Code的Remote-SSH插件对开发环境尤其友好——直接把远程麒麟机器的目录当成本地工程打开编辑远程调试Python、C都很方便。搜索热词里还有人提到Bitvise SSH Server这其实是Windows端的SSH服务端软件思路和Linux的openssh-server一样都是为了实现Windows能被远程SSH连接。如果你需要反向操作把麒麟当客户端去连WindowsBitvise的客户端工具也可以装一下试试。不过我个人还是偏向命令行或VS Code尤其是密钥配置好之后体验最好。4. SSH服务端安全配置4.1 修改SSH配置前的备份习惯服务端刚装好时默认配置对个人使用来说没问题但放在办公环境或生产环境就必须做安全加固了。SSH主配置文件是/etc/ssh/sshd_config任何修改之前先备份是个好习惯别嫌麻烦。我有一次改完端口忘了保留旧会话重启服务后防火墙没放行新端口差点把自己锁在外面。从那以后我养成了两个习惯一是先备份二是改配置必须保持至少一个已建立的会话别断开。备份命令sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak.$(date %Y%m%d)这样备份文件名带日期后续想回滚也能知道哪个是最新的。然后用编辑器打开配置文件sudo vim /etc/ssh/sshd_config不熟悉vim的可以用sudo nano /etc/ssh/sshd_config都行。4.2 关键参数逐项解析和推荐值/etc/ssh/sshd_config里的配置项很多但不是每个都需要动。我挑几个最重要的展开说说你按自己环境决定怎么改。端口号Port默认监听22端口这是全网扫描器最喜欢探测的端口建议改成一个高位端口比如2222或6022。改完记得通知所有需要连接的人不然同事会以为系统坏了。配置写法Port 6022改完之后客户端连接命令要加-p参数ssh -p 6022 用户名目标IPRoot登录策略PermitRootLogin桌面版其实平时很少需要直接root登录SSH建议改成prohibit-password或直接no。prohibit-password表示禁止root密码登录但允许密钥登录no则是完全禁止root远程登录。我个人推荐prohibit-password这样真有紧急情况还能用root密钥登录比锁死更灵活。PermitRootLogin prohibit-password密码认证开关PasswordAuthentication既然配置了密钥登录密码认证就可以考虑关闭。但关闭前一定要确认密钥已经能正常登录否则你会发现自己把唯一入口也关了。PasswordAuthentication no我这里说的no是相对严格的生产环境配置。你的测试机如果不想折腾密钥保留yes也问题不大但要配好Fail2ban或至少把MaxAuthTries调低。最大认证尝试次数MaxAuthTries默认值是6配合密码登录容易被人暴力破解调低到3比较合理MaxAuthTries 3允许登录的用户AllowUsers如果这台麒麟机器只允许特定用户通过SSH登录显式声明一下更安全AllowUsers kylin adminAllowUsers后面的用户名用空格分隔。这个参数慎用因为你漏了某个用户他再来问你怎么连不上你就得背锅了。空闲超时ClientAliveInterval防止有人挂着SSH会话不关掉浪费连接资源ClientAliveInterval 300 ClientAliveCountMax 2这两行表示每300秒检查一次客户端是否存活连续2次无响应就断开连接。对办公环境比较友好避免一堆僵尸会话占着系统资源。限制可使用的SSH协议版本OpenSSH 8以上版本默认只支持SSH 2.0这个不用特别配置但如果你用的是很老的客户端可能需要关注一下兼容性。4.3 防火墙和SELinux/AppArmor的适配改完sshd_config后有一半的“连接不上”问题出在防火墙。银河麒麟桌面版默认可能没有启用防火墙但很多安全基线要求打开。先检查状态sudo ufw status如果显示Status: active需要放行SSH端口。假设你改了端口为6022sudo ufw allow 6022/tcp sudo ufw reload如果你改回默认22端口直接sudo ufw allow 22/tcp也行。麒麟桌面版还有个特点基于Debian系默认使用的是AppArmor而不是SELinux。如果碰到SSH服务起不来但配置看着没问题、端口也没被占用可以查一下AppArmor的日志sudo dmesg | grep -i denied sudo journalctl -u ssh | tail -50正常使用场景下AppArmor对SSH的默认策略不会拦截但某些安全加固镜像可能会额外添加策略这时候可以临时把某个进程的profile设为complaining模式来排查不过这个操作需要谨慎不建议在生产环境随意执行。4.4 重启服务并验证配置修改完配置先做语法检查再重启服务sudo sshd -t sudo systemctl restart sshsshd -t会检查配置语法如果有错误会直接输出提示这是我每次改动配置后必做的检查。确认服务正常后再开一个新终端连接测试千万不要在现有SSH会话里跑重启命令然后立刻断开连接——如果配置有误服务可能起不来你连补救的机会都没有。多开一个会话测试是保命技巧。测试连接时可以用-v参数打印详细连接日志ssh -v -p 6022 用户名目标IP这个参数在排查问题时候特别有用本地和远程的协商过程都会打印出来。之前遇到一个奇怪的问题客户端一连接就被断开用-vvv才发现是服务端accept了连接但/etc/motd里的某个字符造成客户端崩溃清理之后就恢复正常了。5. 常见问题排查与避坑技巧5.1 连接超时还是连接拒绝先分清现象SSH连不上时很多人只会说“连不上”但排查思路完全取决于具体报错。我总结了一个简单的速查表现象可能原因解决方向Connection refusedsshd服务未启动、端口未监听、防火墙丢包但没拒绝查服务状态、查端口监听、查防火墙规则Connection timed out网络不通、防火墙直接丢弃包、跨网段路由异常ping测试、排查路由、确认安全组策略Permission denied (publickey,password)密码错误、密钥不匹配、sshd配置禁止对应认证方式确认密码、重新配置密钥、检查sshd_configConnection closed by remote hostsshd启动异常、PAM模块问题、hosts.deny限制看服务端journal日志、检查PAM配置No supported authentication methods客户端算法太旧、服务端关闭了密码认证换用新客户端、临时开启密码认证以便恢复遇到问题时先别乱试按表格里的方向去查效率高得多。5.2 密码正确但一直提示认证失败这种情况最常见的坑是/etc/ssh/sshd_config里PasswordAuthentication被设成了no但你自己忘了或者系统加固基线默认改掉了。排查时用sudo grep -E PasswordAuthentication|PubkeyAuthentication /etc/ssh/sshd_config看一眼。另一个坑是/etc/security/access.conf或/etc/hosts.deny限制了来源IP。我遇到过一台交付前做了安全基线的麒麟机器/etc/hosts.deny里写了sshd: ALL结果所有人被拒之门外。这种排查起来很隐蔽因为sshd_config怎么看都没问题服务也正常但就是连不上。建议遇到诡异问题时把/var/log/auth.log打开看最后几行线索基本都在里面。5.3 密钥登录配置好了还是提示输密码密钥登录失败通常有三类原因。第一类是权限不对。~/.ssh目录权限必须是700~/.ssh/authorized_keys文件权限必须是600否则sshd会出于安全考虑拒绝读取。修复命令chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys第二类是sshd_config里PubkeyAuthentication被改成no了这个自己检查。第三类最隐蔽~/.ssh/authorized_keys文件的所有者不是当前登录用户而是root或者其他用户。尤其是用sudo创建文件时容易踩这个坑。修复方法sudo chown 用户名:用户名 ~/.ssh/authorized_keys还有一点如果家目录权限本身是777sshd也会拒绝读取授权文件建议~目录权限保持755或750。注意密钥登录配置完成后建议先不要关闭密码认证等你确认密钥能稳定登录了再回头改PasswordAuthentication no。这一步能帮你避免“自己把自己锁在门外”的尴尬。5.4 systemd服务名不一致我在前面提过麒麟桌面版的服务名是ssh而不是sshd。但有些从CentOS习惯转过来的运维会习惯性敲systemctl status sshd一看Unit not found就以为服务没装。这时候可以用systemctl list-unit-files | grep ssh看看系统里有哪些SSH相关单元你就知道该用哪个服务名了。另外麒麟V10 SP1上如果同时安装了openssh-server和openssh-clientsystemctl列表里通常只有ssh.service一个服务单元没有单独的sshd.service。这个设计跟Debian系一致习惯了就好。5.5 修改用户密码时被PAM策略卡住搜索热词里有人问“银河麒麟系统怎么修改普通用户密码”这个和SSH登录也有点关系——如果你SSH登录进去后想帮同事改密码可能会遇到密码复杂度限制。麒麟默认的PAM配置对密码长度、字符类型有要求直接用passwd设置弱密码可能会被拒绝。修改普通用户密码的正确姿势sudo passwd 用户名如果被PAM策略挡住有两个选择换一个符合复杂度要求的强密码或者临时调整/etc/pam.d/common-password里的pam_pwquality.so配置。生产环境建议用强密码别为了一时方便给安全留后门。修改完密码后如果这个用户正在SSH连接中他的现有会话不会被踢掉但下次登录必须使用新密码。如果你用密钥登录密码修改不影响密钥认证。5.6 桌面环境下挂载数据盘导致的家目录权限问题搜索热词里有人提到“银河麒麟桌面操作系统v10数据盘路径改成数据盘”这个跟SSH的关系在于如果系统盘空间不够很多人会把/home分区迁移或额外挂载一块数据盘然后把用户家目录指过去。这种情况下如果挂载配置里没有正确设置权限用户家目录可能是700或750但所有者变成root了或者文件系统挂载参数带了noexec之类的限制SSH密钥登录可能直接失效。排查方法很简单df -h | grep /home ls -ld /home/用户名如果家目录所有者异常用chown修正。如果挂载参数有问题改/etc/fstab里的对应行去掉不必要的noexec或nosuid参数然后重新挂载。这个坑比较冷门但在桌面版上真实存在特别是那些喜欢把数据单独放一块盘的场景。6. 桌面环境下的配置文件路径与数据路径6.1 SSH相关配置文件的位置整理一份麒麟桌面版V10 SP1上SSH相关的常用路径方便你快速定位问题文件/目录作用/etc/ssh/sshd_config服务端主配置文件/etc/ssh/ssh_config客户端全局配置文件/etc/ssh/ssh_host_rsa_keyRSA主机私钥/etc/ssh/ssh_host_ed25519_keyEd25519主机私钥~/.ssh/id_rsa用户RSA私钥~/.ssh/id_rsa.pub用户RSA公钥~/.ssh/authorized_keys服务端保存的客户端公钥列表/var/log/auth.logSSH认证日志我在实际工作中发现很多人只盯着sshd_config改配置忘了客户端也有配置文件结果客户端这边UserKnownHostsFile或者IdentityFile指向不对密钥就是用不上。排查问题时两端配置都检查一遍会省很多时间。6.2 验证SSH连接花费几分钟但进不去如果你发现SSH连接要停好久才提示输密码通常是UseDNS和GSSAPIAuthentication这两个配置在拖后腿。UseDNS yes会让服务端反向解析客户端IP的域名内网没有DNS时会卡到超时GSSAPIAuthentication yes在跨域认证场景会尝试Kerberos认证家用办公环境根本用不到。建议把这几个参数在/etc/ssh/sshd_config里显式改掉UseDNS no GSSAPIAuthentication no重启服务后连接速度会有明显提升。这个优化虽小但对那
返回列表