Linux SSH密钥对生成与管理:从RSA到Ed25519的完整指南
1. 项目概述为什么我们需要SSH密钥对如果你经常需要登录远程的Linux服务器或者使用Git等版本控制工具还在反复输入密码那这篇文章就是为你准备的。SSH密钥对特别是基于RSA或Ed25519算法的是现代运维、开发和系统管理中最基础也最核心的安全认证机制。它用一对数学上关联的密钥——一个私钥绝对保密留在本地和一个公钥可以公开分发放到远程服务器——取代了脆弱的密码登录。简单来说它的工作原理就像一把私有的“钥匙”和一把公开的“锁芯模具”。你把“模具”公钥复制到服务器上以后每次连接服务器就用这个“模具”来验证你手中的“钥匙”私钥是否匹配匹配则放行无需密码。这个过程不仅彻底杜绝了密码在网络上被嗅探或暴力破解的风险还为自动化脚本如CI/CD流水线、备份脚本提供了无人值守的安全认证方式。今天我们就从零开始手把手在Linux环境下生成、管理和使用SSH密钥对并深入那些官方文档很少提及的实操细节和避坑指南。无论你是刚接触Linux的新手还是需要优化工作流的老手都能在这里找到直接可用的“抄作业”方案。2. 核心原理与算法选型不止于ssh-keygen在动手敲命令之前花几分钟理解背后的原理和选项能让你在日后面对各种场景时都游刃有余。ssh-keygen是OpenSSH套件中用于生成密钥的工具但其核心价值在于对加密算法的选择。2.1 主流算法对比RSA vs. Ed25519目前最常用的两种算法是传统的RSA和现代的Ed25519。你的选择直接影响安全性、性能和兼容性。RSA (Rivest–Shamir–Adleman):原理简述基于大数分解的难度。生成一对大素数利用它们的乘积公钥和原始素数私钥之间的关系进行加密和签名。优点兼容性极佳几乎所有历史遗留系统和软件都支持。你可以通过密钥长度如2048, 4096位来直观地调整安全强度。缺点在相同安全强度下密钥文件比Ed25519大生成和签名速度也相对较慢。根据当前的安全标准密钥长度至少应为2048位推荐使用4096位以应对未来的算力发展。适用场景需要连接老旧服务器、路由器或某些特定嵌入式设备时。Ed25519:原理简述基于椭圆曲线密码学ECC使用Twisted Edwards曲线。它在更短的密钥长度下提供了与长RSA密钥相当甚至更高的安全性。优点安全性高256位的Ed25519密钥其安全强度堪比大约3000位的RSA密钥。速度快密钥生成、签名和验证速度都比RSA快得多。密钥短私钥和公钥文件更小便于管理。设计严谨整个算法设计避免了某些潜在的侧信道攻击。缺点一些非常老旧的系统如2014年以前的OpenSSH版本可能不支持。适用场景绝大多数现代场景下的首选。从个人电脑连接到云服务器、GitHub/GitLab托管到内部服务器集群只要目标系统OpenSSH版本不低于6.52014年发布都强烈推荐使用Ed25519。注意曾经流行的ECDSA算法虽然也基于椭圆曲线但因其在随机数生成器存在缺陷时可能泄露私钥的风险目前社区普遍更推荐Ed25519。2.2 密钥对的组成与安全边界生成的一对密钥文件通常命名为id_algorithm例如id_rsa,id_ed25519及其对应的.pub公钥文件。私钥 (id_rsa)这是你的数字身份凭证必须像保护银行密码一样保护它。任何获取你私钥的人都可以冒充你访问所有配置了对应公钥的服务。最佳实践是为私钥设置强密码passphrase即使文件被盗也多一层加密保护。权限设置为600仅所有者可读写。绝不通过网络明文传输也不应上传到任何网盘或代码仓库。公钥 (id_rsa.pub)这是一串可以安全公开的文本。它的内容会被添加到远程服务器的~/.ssh/authorized_keys文件中。公钥无法推导出私钥因此分发公钥是安全的。理解了这些我们就能做出明智的选择对于新项目和个人使用无脑选Ed25519当遇到兼容性问题时再使用RSA 4096作为备选。3. 详细实操步骤从生成到部署现在我们进入实战环节。请打开你的Linux终端无论是本地系统WSL还是通过密码登录的远程服务器。3.1 生成Ed25519密钥对推荐这是当前最推荐的方式。在终端中输入以下命令ssh-keygen -t ed25519 -C your_emailexample.com-t ed25519指定算法类型为Ed25519。-C comment在公钥末尾添加一个注释。通常用你的邮箱标识这个密钥的归属便于后期管理。这不是必须的但强烈建议加上。执行命令后你会看到交互提示Generating public/private ed25519 key pair. Enter file in which to save the key (/home/your_username/.ssh/id_ed25519):保存路径直接按回车使用默认路径 (~/.ssh/id_ed25519)。如果你需要为特定项目或服务器生成独立密钥可以在这里输入自定义路径和文件名例如/home/your_username/.ssh/github_ed25519。设置密码短语Enter passphrase (empty for no passphrase): Enter same passphrase again:强烈建议设置一个强密码短语。这会在使用密钥时要求再次输入即使私钥文件泄露攻击者也无法直接使用。如果你确定环境绝对安全且需要完全自动化如CI/CD可以留空。输入时屏幕无回显正常输入并确认即可。生成完成成功后终端会显示密钥的指纹一串短哈希和随机艺术图案。你的密钥对就已经安静地躺在~/.ssh/目录下了。3.2 生成RSA密钥对兼容方案如果你需要RSA密钥命令类似ssh-keygen -t rsa -b 4096 -C your_emailexample.com-t rsa指定算法为RSA。-b 4096指定密钥长度为4096位。这是当前推荐的安全长度。省略此参数则默认为2048位。后续的保存路径和密码短语设置步骤与Ed25519完全相同。3.3 关键文件权限设置SSH协议对文件权限非常敏感错误的权限会导致连接失败。生成密钥后务必检查并设置正确的权限。# 确保 .ssh 目录的权限为 700 (drwx------) chmod 700 ~/.ssh # 确保私钥文件的权限为 600 (-rw-------) chmod 600 ~/.ssh/id_ed25519 # 公钥文件的权限通常为 644 (-rw-r--r--)宽松一些也可以 chmod 644 ~/.ssh/id_ed25519.pub实操心得很多新手在配置后无法免密登录90%的原因都是~/.ssh目录或authorized_keys文件的权限太开放。SSH客户端会出于安全考虑直接拒绝使用权限不当的私钥或读取权限不当的authorized_keys文件。3.4 部署公钥到远程服务器生成了密钥下一步就是让远程服务器认识你的“公钥模具”。方法一使用ssh-copy-id命令最简便如果你的本地机器也安装了OpenSSH客户端通常都有可以使用这个神器ssh-copy-id -i ~/.ssh/id_ed25519.pub usernameremote_server_ip-i指定你要发送的公钥文件路径。usernameremote_server_ip你的远程服务器用户名和IP地址或域名。这个命令会自动登录到远程服务器需要输入一次密码并将你的公钥追加到远程服务器对应用户的~/.ssh/authorized_keys文件中同时帮你设置好正确的文件权限。方法二手动复制通用方法如果ssh-copy-id不可用可以手动操作在本地查看并复制公钥内容cat ~/.ssh/id_ed25519.pub完整选中终端输出的全部内容通常以ssh-ed25519 AAAAC3...开头以你的邮箱注释结尾并复制。登录到远程服务器ssh usernameremote_server_ip在远程服务器上确保~/.ssh目录存在并编辑或创建authorized_keys文件mkdir -p ~/.ssh chmod 700 ~/.ssh echo “粘贴你刚才复制的公钥内容” ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys退出远程服务器尝试免密登录。3.5 测试连接部署完成后进行一次测试ssh -i ~/.ssh/id_ed25519 usernameremote_server_ip如果一切配置正确且你设置了密码短语此时会提示你输入密码短语而非服务器密码。输入正确后即可登录。如果没设置密码短语则会直接登录成功。4. 高级管理与多密钥对配置当你需要管理多台服务器、多个Git平台如公司的GitLab和个人的GitHub时为每个场景使用独立的密钥对是更安全、更清晰的做法。4.1 为不同场景生成独立密钥例如为GitHub和工作服务器生成不同的Ed25519密钥# 为GitHub生成密钥 ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519_github -C “your_personal_emailexample.com” # 为工作服务器生成密钥 ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_work -C “your_work_emailcompany.com”使用-f参数指定完整的文件路径和名称。4.2 配置SSH客户端 (~/.ssh/config)手动指定每次连接使用的密钥很麻烦。通过配置~/.ssh/config文件可以让SSH客户端自动选择正确的密钥。编辑或创建~/.ssh/config文件nano ~/.ssh/config添加如下配置# 通用配置对所有主机生效 Host * # 保持连接活跃防止超时断开 ServerAliveInterval 60 ServerAliveCountMax 3 # 优先使用Ed25519算法 IdentitiesOnly yes # 针对GitHub的特定配置 Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github # 使用新的签名算法格式兼容最新GitHub要求 PubkeyAcceptedAlgorithms ssh-rsa HostkeyAlgorithms ssh-rsa # 针对工作服务器的配置 Host work-server HostName 192.168.1.100 # 或你的服务器域名 User deploy Port 2222 # 如果使用了非标准22端口 IdentityFile ~/.ssh/id_rsa_work # 针对某个内部测试环境的配置 Host test-env HostName test.example.com User admin IdentityFile ~/.ssh/id_ed25519 # 跳过严格的主机密钥检查仅用于测试环境生产环境慎用 StrictHostKeyChecking no UserKnownHostsFile /dev/null配置完成后你就可以用简单的别名进行连接了ssh work-server # 等价于 ssh -i ~/.ssh/id_rsa_work -p 2222 deploy192.168.1.100 ssh test-env # 等价于 ssh -i ~/.ssh/id_ed25519 admintest.example.com对于Git配置了Host github.com后所有gitgithub.com:开头的仓库地址都会自动使用指定的密钥。注意事项StrictHostKeyChecking no和UserKnownHostsFile /dev/null会禁用主机密钥验证存在中间人攻击风险。仅在完全可控的、封闭的测试或开发环境中临时使用绝对不要用于生产环境或连接外部网络。4.3 使用ssh-agent管理密钥密码短语如果你为私钥设置了强密码短语每次使用都要输入会很繁琐。ssh-agent是一个密钥管理器它可以将解密后的私钥保存在内存中一段时间在此期间内无需重复输入密码。启动并添加密钥到agent# 启动ssh-agent如果尚未运行 eval “$(ssh-agent -s)” # 将你的默认私钥如id_ed25519添加到agent ssh-add ~/.ssh/id_ed25519 # 如果你有多个密钥可以依次添加 ssh-add ~/.ssh/id_ed25519_github ssh-add ~/.ssh/id_rsa_work执行ssh-add时会提示你输入一次密钥的密码短语输入正确后该密钥就被缓存在内存中了。在终端会话期间再次使用这些密钥连接时就不再需要输入密码。查看已添加的密钥列表ssh-add -l从agent中删除特定密钥ssh-add -d ~/.ssh/id_ed25519_github清空agent中的所有密钥ssh-add -D为了让登录桌面环境或打开新终端时自动启动ssh-agent并添加常用密钥你可以将相关命令添加到你的 shell 配置文件如~/.bashrc或~/.zshrc中。但更优雅的方式是使用桌面环境或系统提供的密钥环集成如GNOME的Keyring或KDE的Wallet它们能更安全地持久化存储密码短语。5. 常见问题排查与实战技巧即使按照步骤操作你也可能会遇到一些问题。下面是一些常见故障及其解决方法。5.1 连接失败问题速查表问题现象可能原因排查命令与解决方案Permission denied (publickey).1. 公钥未正确部署到服务器。2. 服务器上~/.ssh或authorized_keys权限错误。3. 本地私钥权限错误。4. SSH服务端配置禁止了密钥登录。1.本地验证ssh -Tv gitgithub.com(以GitHub为例)-v参数查看详细过程。2.检查权限在服务器上执行ls -la ~/.ssh/确保目录为700authorized_keys为600。3.检查公钥确认服务器authorized_keys文件内容完整与本地公钥一致没有多余空格或换行。4.检查服务端配置查看/etc/ssh/sshd_config确保有PubkeyAuthentication yes。Agent admitted failure to sign using the key.私钥已加载到ssh-agent但agent未能成功使用它。1. 尝试重新添加密钥ssh-add ~/.ssh/your_private_key。2. 重启ssh-agent先eval “$(ssh-agent -k)”杀掉再eval “$(ssh-agent -s)”启动并重新添加。Load key “/path/to/key”: bad permissions私钥文件权限过于开放。执行chmod 600 /path/to/your_private_key。Warning: the ECDSA host key for ‘hostname’ differs from the key for the IP address ‘x.x.x.x’服务器的主机密钥发生了变化常见于服务器重装系统或IP地址复用。1.安全确认首先确认服务器变更是否合法。2.清除旧记录ssh-keygen -R hostname_or_ip从本地known_hosts文件中删除旧指纹然后重新连接接受新指纹。连接缓慢DNS解析问题或SSH服务端启用了GSSAPI等可能导致延迟的认证方式。1. 在~/.ssh/config中为对应主机添加GSSAPIAuthentication no。2. 添加UseDNS no需服务器端也支持。5.2 使用-v参数进行调试当遇到连接问题时最强大的工具是SSH客户端的详细输出模式。添加一个-vverbose参数可以输出大量调试信息三个-vvv信息量最大。ssh -vvv usernameremote_server_ip仔细阅读输出搜索debug1:和debug2:开头的行。它会告诉你正在尝试读取哪个私钥文件。是否成功加载了密钥。尝试了哪种认证方式publickey, password, keyboard-interactive等。在哪个步骤失败了。5.3 密钥的备份与迁移备份本质上就是安全地备份你的~/.ssh目录下的私钥文件以及config文件。可以将它们加密压缩后存放在多个安全的地方例如加密的U盘或你信任的密码管理器文件附件中。切记公钥 (.pub) 可以随意备份私钥必须加密备份。迁移将密钥对从旧机器迁移到新机器就是安全地将私钥文件和config文件复制到新机器的~/.ssh/目录下并立即设置正确的文件权限chmod 600私钥chmod 700目录。迁移后最好在旧机器上安全地擦除私钥并非简单删除可使用shred命令。5.4 定期检查与密钥轮换像更换密码一样定期轮换SSH密钥也是一个好习惯尤其是当私钥有泄露风险时例如电脑丢失、维修。生成新密钥对使用更强的算法或更长长度。将新公钥部署到所有相关的服务器和服务的authorized_keys文件中。测试新密钥可以正常登录。从所有服务中移除旧公钥。安全地销毁旧私钥同样建议使用安全删除工具。我个人在实际操作中的体会是花半小时建立一个清晰的SSH密钥管理体系后续能节省无数排查连接问题的时间。特别是维护好~/.ssh/config文件它就像一份连接清单让管理数十台服务器变得井然有序。对于团队协作可以将服务器的公钥集中管理通过配置管理工具如Ansible批量部署到所有主机确保一致性和安全性。最后永远记住私钥的保密性是第一位的设置了强密码短语的私钥即使不小心被scp到了临时目录也多了一道坚固的防线。

相关新闻

Hive SQL数据形态转换:列转行与行转列核心操作详解

Hive SQL数据形态转换:列转行与行转列核心操作详解

1. 项目概述:数据形态转换的核心操作 在数据仓库和数据分析的日常工作中,我们经常遇到一种情况:原始数据以一种“堆积”或“聚合”的形态存储,但我们的分析需求却要求将其“展开”或“合并”。比如,一个用户的所有浏览…

2026/10/19 14:00:23 阅读更多 →
终极指南:如何用Meshroom将照片转换为3D模型——开源3D重建工具完整教程

终极指南:如何用Meshroom将照片转换为3D模型——开源3D重建工具完整教程

终极指南:如何用Meshroom将照片转换为3D模型——开源3D重建工具完整教程 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom Meshroom是一款强大的开源3D重建软件,通过AI技…

2026/10/19 20:53:18 阅读更多 →
OpenClaw 2026.3.2权限管理升级与RBAC实践

OpenClaw 2026.3.2权限管理升级与RBAC实践

1. OpenClaw 2026.3.2 核心功能解析 OpenClaw作为一款开源的自动化运维工具链组件,其2026.3.2版本在权限管理模块进行了重大升级。本次更新的核心亮点在于tools.profile配置文件的权限控制机制重构,使得系统管理员能够更精细地管理命令执行权限。在实际运…

2026/10/18 9:02:11 阅读更多 →

最新新闻

YOLOv8嵌入CoTNet:改造C2f结构提升检测精度

YOLOv8嵌入CoTNet:改造C2f结构提升检测精度

大家在做目标检测的时候,针对某个特定场景,直接用原版YOLOv8跑出来的效果往往差口气。比如小目标漏检、遮挡目标框不准,或者背景复杂导致误检。这时候大多数人第一反应是换更大的模型,或者加数据增强,但很少有人会想到…

2026/10/21 2:04:39 阅读更多 →
原神小助手:3 步跑通自动战斗、秘境刷本与大世界采集

原神小助手:3 步跑通自动战斗、秘境刷本与大世界采集

原神小助手:3 步跑通自动战斗、秘境刷本与大世界采集 【免费下载链接】genshin_impact_assistant 原神小助手 Genshin Assistant (CN/EN) | 自动战斗,秘境,领日常,半自动委托 项目地址: https://gitcode.com/GitHub_Trending/ge/genshin_impact_assistant 每天 120 点树…

2026/10/21 2:04:39 阅读更多 →
永磁同步电机全速域无位置传感器控制:高频方波注入与滑模观测器加权切换策略

永磁同步电机全速域无位置传感器控制:高频方波注入与滑模观测器加权切换策略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:04:39 阅读更多 →
广告投放风控防坑必备软件:传播易、朝闻通、拓氪科技

广告投放风控防坑必备软件:传播易、朝闻通、拓氪科技

随着移动互联网营销迈入精细化、合规化、长效化发展阶段,传统粗放式广撒网的广告投放模式已彻底失效。当前,全域资源整合、AI智能内容生产、全链路数据监测、合规风控管控、私域用户长效沉淀,已成为全行业广告主的核心营销刚需。现阶段各类企…

2026/10/21 2:04:39 阅读更多 →
199元DIY开源AI录音卡:集成离线转写、说话人识别与DeepSeek思维导图

199元DIY开源AI录音卡:集成离线转写、说话人识别与DeepSeek思维导图

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:04:39 阅读更多 →
汽车出海车载eSIM选型指南:四类供应商模式与落地避坑

汽车出海车载eSIM选型指南:四类供应商模式与落地避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/21 2:03:39 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →