尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
kubectl-ssh:一条命令轻松登录任意Kubernetes节点
如果让我列一个 Kubernetes 日常排障里最磨人的环节登录节点一定排在前三。节点 NotReady、Pod 卡在 Pending、容器运行时抽风……很多问题不跑到节点上看一眼根本定位不了。而问题恰恰就出在“到节点上看一眼”这几个字上你要先查出节点对应的 IP再找到这台机器能用的 SSH 私钥还得记得用户名和端口如果网络环境复杂一点中间还隔着一台跳板机。在集群数量少、只有你自己操作的时候这套流程还能忍一旦集群多了或者换个人来处理往往光找钥匙就花掉大半时间。kubectl-ssh 就是冲着这个痛点来的。它本质上是一个 kubectl 插件让你在已经具备集群访问权限的前提下直接用kubectl ssh 节点名这种方式登录任意节点。集群里所有节点的名称和地址都由 Kubernetes API 帮你维护私钥、用户名、跳板机这些参数提前配置好剩下的操作就只是敲一条命令。这篇文章我会从设计思路开始把它的原理、安装步骤、配置方法和实际排障场景完整过一遍也会把我在使用过程中踩过的坑一并写出来。无论你是在自建集群做运维还是在云上管理多套环境这套思路都可以直接抄走。1. 为什么需要 kubectl-ssh先梳理手动登录节点的真实痛点1.1 手动登录一个节点到底需要几步别小看“登录节点”这个动作拆开来看它至少包含四个环节。第一步是确认节点名称。一般得先执行kubectl get nodes从输出里挑出目标节点比如 node-01、node-02。这个还好说节点少的时候一眼就能看到。第二步是查出这个节点的 IP。最懒的办法是kubectl get nodes -o wide它会显示 Internal-IP 字段。但如果是云上集群或者节点有多个网卡这个默认显示的 IP 不一定能直接连上尤其当你在办公网、节点在另一个内网网段时就很容易出现“拿到地址但连不通”的情况。更可靠的做法是从 Node 对象里按类型过滤出 InternalIP 或 ExternalIP这一步就得写 jsonpath 或者解析 JSON命令本身就开始变得难记了。第三步是找到能用的 SSH 私钥。这里往往是事故高发区。一台机器可能同时被多套环境共用有时候是 cloud-init 注入的密钥有时候是运维统一分发的密钥有时候是某位同事临时手动加的 key。一旦搞混ssh 就会直接报 Permission denied。更麻烦的是私钥文件如果权限不对ssh 连尝试都不会尝试。第四步才是真正的连接动作。基础写法是ssh -i key userip如果节点只能从内网访问还得先连跳板机再在跳板机上执行跳转命令。整个过程链条长、依赖外部记忆稍不留神就会卡在某一环上。1.2 多环境、多团队下的密钥噩梦我身边一个真实例子某个团队同时维护三套环境开发、预发、生产各一个集群每套环境的节点使用不同私钥。刚来的同学要处理一个预发节点的问题先翻了半天文档找到了预发集群的 kubeconfig又再翻另一个文档找到了预发的私钥文件结果连上去才发现密钥过期了最后只能在群里喊老同事帮忙。整个过程花了将近二十分钟而真正排查问题的时间可能都不到十分钟。这种“知识碎片化”的现状在稍微大一点的团队里太常见了。密钥分散在个人电脑、跳板机、内部文档里没有一个统一的入口去收敛。时间一长就会有人图省事把私钥权限改成 777或者把密钥直接塞到某个共享目录里随之而来的就是安全性和可用性的双重下降。另一个容易忽视的问题是审计。用普通 ssh 登录节点谁登录过、什么时候登录的、做了什么操作基本只能靠堡垒机那一层的记录。如果没有堡垒机那就是一笔糊涂账。而 kubectl-ssh 的好处在于它把登录动作纳入到了 kubectl 体系里天然可以借助 Kubernetes 的 RBAC 做权限控制也方便统一审计。1.3 kubectl-ssh 的定位把节点发现完全交给集群kubectl-ssh 的核心思想并不复杂节点名称和 IP 这些信息Kubernetes API 本来就维护好了我们没必要在自己脑子里或者笔记里再维护一份。工具要做的事情就是把“查节点信息”这一步自动化再把“拼接 ssh 命令”这步自动化。从使用体验来看它相比传统 ssh 方式有一个很直观的区别你不再需要关心 IP、用户名、私钥路径这些细节。你的注意力只需要放在“哪个节点”和“上去干什么”这两件事上。下面这个表可以直观看出差异登录方式节点寻址方式密钥管理方式交互体验手动 ssh 查 IP靠人记或靠文档分散在各人机器上命令长容易出错ssh 别名~/.ssh/config手动维护一遍依然分散省了参数但配置维护成本高kubectl-ssh 插件每次从 Kubernetes API 实时获取统一在配置文件中管理只记节点名一条命令登录ansible 等批量工具维护独立 inventorySSH key 统一偏批量执行交互式排障较弱这个定位决定了它的适用人群。如果你经常在 kubectl 和节点之间来回切换如果你需要帮新人降低排障门槛如果你管理的集群分布在多个网段、需要频繁通过跳板机访问节点那 kubectl-ssh 几乎是零成本就能用起来的小工具。2. 核心原理拆解一条 kubectl 命令背后发生了什么2.1 kubectl 插件机制一个可执行文件就能扩展 kubectl很多人以为扩展 kubectl 必须要写 Go 代码、用 client-go 重新编译其实完全不是这样。kubectl 天生支持插件机制它会在 PATH 环境变量里查找以kubectl-开头的可执行文件。当你执行kubectl ssh node-01时kubectl 实际上帮你去 PATH 里找了一个叫kubectl-ssh的程序然后执行它并把后面的参数原样传给它。也就是说插件本身可以是任何可执行文件Shell 脚本、Python 脚本、编译好的二进制都可以。只要你把文件命名为kubectl-ssh加上执行权限放在/usr/local/bin这类 PATH 目录下kubectl 就能识别到它。有个小细节需要注意kubectl plugin list可以列出当前环境中所有可识别的插件。我在实际排障时经常先用这条命令确认插件是否真的被加载如果这里看不到插件那不管你怎么执行kubectl ssh都是找不到命令的。另外提一下历史坑很早版本的 kubectl 支持通过KUBECTL_PLUGINS_PATH环境变量指定插件目录后来这个机制被废弃了现在统一从 PATH 查找。如果你在网上看到老教程里写“配置 KUBECTL_PLUGINS_PATH”在新版本中已经不起作用。2.2 节点寻址从 Node 对象里拿到正确的 IPkubectl-ssh 的核心逻辑第一步是根据你传入的节点名从 Kubernetes API 拿到目标节点的 IP。Node 对象的status.addresses字段里会有多条地址记录常见的 type 包括InternalIP节点在集群内网中的 IP通常是自建集群里最常用来登录的地址。ExternalIP节点对集群外部暴露的 IP云上节点或通过 NAT 映射时常用。Hostname主机名不能直接用于 SSH 连接一般只用于标识。我的插件脚本里用 jsonpath 来提取指定类型的地址NODE_IP$(kubectl get node $NODE_NAME -o jsonpath{.status.addresses[?(.type\$ADDR_TYPE\)].address})这里有个容易踩的坑jsonpath 里的双引号嵌套。如果直接在命令行里执行需要用单引号或转义双引号把过滤条件包好。在脚本里我采用了转义的方式确保ADDR_TYPE变量能被正确替换进去。当然如果 jsonpath 写法在某个版本的 kubectl 上不兼容退而求其次可以用kubectl get node -o json配合jq解析效果一样kubectl get node $NODE_NAME -o json | jq -r .status.addresses[] | select(.type InternalIP) | .address2.3 SSH 会话拼接参数、密钥、跳板机的处理拿到 IP 之后剩下的就是拼装 ssh 命令。最基础的形式是ssh -i $SSH_PRIVATE_KEY -p $SSH_PORT -o StrictHostKeyCheckingno $SSH_USER$NODE_IP其中-i指定私钥路径-p指定端口-o StrictHostKeyCheckingno是避免 known_hosts 里出现旧记录导致登录被中断。这一步看起来很常规但有两个细节值得展开说。第一脚本需要支持“透传参数”。也就是说执行kubectl ssh node-01 uptime时我希望uptime能作为远程命令传给 ssh而不是被 kubectl-ssh 脚本自己吞掉。这就要在脚本中把去掉节点名之后的所有参数再传给 sshexec ssh -i $SSH_PRIVATE_KEY -p $SSH_PORT -o StrictHostKeyCheckingno \ $SSH_USER$NODE_IP $第二StrictHostKeyChecking 这个选项要有一个清晰的取舍。关闭它确实方便因为节点 IP 变化后不会因为 known_hosts 冲突而拒绝连接但代价是降低了防止中间人攻击的能力。我的习惯是在内部可控网络中关闭如果是生产核心集群或面对公网跳板机建议改成accept-new也就是只在遇到新主机时自动接受已存在的主机校验失败则拒绝。2.4 为什么用轻量脚本而不是 Go 插件你可能会问既然这工具这么好用为什么不用 Go 写一个功能更全的插件我个人的考虑很简单shell 脚本已经覆盖了 90% 的日常场景而且可读性极高。团队里任何人拿到这份脚本几十行内容可以一眼看完随时能改逻辑。Go 插件确实带来了更好的参数补全、错误处理能力但它引入了编译链、依赖管理和版本发布的问题。对于一个解决“查 IP、拼 ssh”这种轻量需求的工具来说这些复杂度不划算。工程上的选择永远要跟着问题规模走杀鸡不必用牛刀。一旦脚本里开始堆积跳板机矩阵、自动补全、多集群密钥轮换这些复杂逻辑再考虑重写成更正式的程序才是合理的。3. 从零实操安装 kubectl-ssh 并完成第一次登录3.1 三步完成插件安装与验证第一步把核心脚本保存为/usr/local/bin/kubectl-ssh。这里直接贴一个我日常使用的精简版本你可以先用它跑通流程再根据自己的环境改配置#!/usr/bin/env bash set -euo pipefail CONF${KUBECTL_SSH_CONF:-$HOME/.kube/kubectl-ssh.conf} if [[ -f $CONF ]]; then source $CONF fi SSH_USER${KUBECTL_SSH_USER:-root} SSH_PORT${KUBECTL_SSH_PORT:-22} SSH_PRIVATE_KEY${KUBECTL_SSH_PRIVATE_KEY:-$HOME/.ssh/id_rsa} USE_EXTERNAL_IP${KUBECTL_SSH_USE_EXTERNAL_IP:-false} if [[ $# -lt 1 ]]; then echo usage: kubectl ssh node-name [ssh options...] [remote command] 2 exit 1 fi NODE_NAME$1 shift if [[ $USE_EXTERNAL_IP true ]]; then ADDR_TYPEExternalIP else ADDR_TYPEInternalIP fi NODE_IP$(kubectl get node $NODE_NAME -o jsonpath{.status.addresses[?(.type\$ADDR_TYPE\)].address} 2/dev/null) if [[ -z $NODE_IP ]]; then echo error: cannot find $ADDR_TYPE for node $NODE_NAME 2 exit 2 fi exec ssh -i $SSH_PRIVATE_KEY -p $SSH_PORT -o StrictHostKeyCheckingno \ ${SSH_USER}${NODE_IP} $这个脚本的逻辑非常直白读取配置文件确定用户名、私钥、端口和地址类型然后从 Kubernetes API 获取节点 IP最后交给 ssh 执行。set -euo pipefail是为了避免脚本在遇到错误时继续往下跑。第二步加上执行权限chmod x /usr/local/bin/kubectl-ssh第三步验证插件已被 kubectl 识别kubectl plugin list正常情况下你会看到类似kubectl-ssh出现在列表里。这一步非常重要因为如果插件没被识别后面执行kubectl ssh时会直接报“unknown command”。3.2 配置文件与环境变量的设计脚本启动后会读取~/.kube/kubectl-ssh.conf这个配置文件如果文件不存在就用脚本里的默认值。我的配置格式很简单就是一组环境变量赋值KUBECTL_SSH_USERroot KUBECTL_SSH_PRIVATE_KEY/home/ops/.ssh/prod_rsa KUBECTL_SSH_PORT22 KUBECTL_SSH_USE_EXTERNAL_IPfalse为什么用配置文件而不是直接在脚本里写死因为团队里不同同学可能用不同用户名连不同环境把这类“易变信息”放到配置里脚本主体就能保持稳定。别人复制这个脚本之后只需要改配置文件就能跑起来。每个变量也可以直接用环境变量覆盖比如临时想改连某个节点的用户可以这样KUBECTL_SSH_USERadmin kubectl ssh node-01这种“环境变量优先、配置文件其次、脚本默认值兜底”的三层结构在运维小工具里很好用既灵活又不容易出错。3.3 基础用法与常用参数实测安装配置完成后最基础的用法就是直接登录节点kubectl ssh node-01这条命令会直接进入一个交互式 shell。如果想在远程节点上执行单条命令不用进入交互模式直接写在后面kubectl ssh node-01 uptime kubectl ssh node-01 df -h / kubectl ssh node-01 journalctl -u kubelet -n 50 --no-pager这里有个经验当命令里有管道、通配符或者空格时记得给整条远程命令加引号否则这些字符会在本地 shell 里先被解析掉导致远程执行的内容和你预期的不一致。比如kubectl ssh node-01 df -h /其实也能跑但一旦命令变成df -h / | grep vda就必须加引号把管道传给远端。如果你想临时以外部 IP 登录可以这样KUBECTL_SSH_USE_EXTERNAL_IPtrue kubectl ssh node-01这个方法在云上集群或者节点没有内网直达路由时很实用。3.4 实战一次 NotReady 节点的完整排查过程说一个我实际经历过的场景能很好展示这个工具的价值。某天监控告警显示 node-02 状态变成 NotReady上面运行的服务全部受影响。第一反应当然是看节点状态kubectl get nodes确认 node-02 处于 NotReady 后传统的做法是查它的 IP、找密钥、再 ssh 过去。而用 kubectl-ssh 就很直接kubectl ssh node-02登录成功后我先看 kubelet 的状态systemctl status kubelet发现服务处于 active (running)但日志里反复出现磁盘压力相关的驱逐记录。继续看日志journalctl -u kubelet --since 10 minutes ago --no-pager很快确认是/var/lib/containers所在分区使用率达到了 98%触发了节点磁盘压力导致 kubelet 把节点标记为 NotReady并开始驱逐 Pod。再看看磁盘的实时占用df -h定位到确实是镜像和容器日志占满了分区。清掉无用镜像后节点状态稍后自动恢复。整个排查过程我只需要记住两个关键点哪个节点 NotReady以及常见的排查命令。节点的 IP、密钥、用户名这些信息完全没被我关心过这是 kubectl-ssh 最直接的体验提升。4. 进阶玩法让 kubectl-ssh 适应真实生产环境4.1 跳板机与双网卡场景的配置很多自建集群的节点处于内网网段办公网无法直接访问。这时候就需要通过跳板机转发。kubectl-ssh 需要支持这种场景否则实用性会大打折扣。我采用的方式是把跳板机的连接参数也放进配置文件KUBECTL_SSH_JUMP_HOSTjump-host.internal KUBECTL_SSH_JUMP_USERops KUBECTL_SSH_JUMP_KEY/home/ops/.ssh/jump_rsa然后在脚本里检测到KUBECTL_SSH_JUMP_HOST存在时使用 ProxyCommand 方式连接exec ssh -i $SSH_PRIVATE_KEY \ -o ProxyCommandssh -W %h:%p -i $KUBECTL_SSH_JUMP_KEY $KUBECTL_SSH_JUMP_USER$KUBECTL_SSH_JUMP_HOST \ $SSH_USER$NODE_IP $这里的-W %h:%p是 ssh 自带的标准跳板机用法%h表示目标主机地址%p表示目标端口会在运行时被 ssh 自动替换。这样“本地 - 跳板机 - 节点”的链路就建立了。需要注意一个细节KUBECTL_SSH_JUMP_KEY最好写绝对路径因为 ProxyCommand 是在本地执行相对路径容易因为当前工作目录不同而找不到。这个坑我踩过一次排查了半天才发现是相对路径的问题。4.2 多集群 context 下的密钥自动匹配如果你同时管理多套集群不同集群的节点可能需要不同的私钥。这时候每次都手动指定KUBECTL_SSH_PRIVATE_KEY会很繁琐更好的方式是让脚本根据当前 kubectl 的 context 自动选择密钥。我在配置里加了一个关联表declare -A CONTEXT_KEY_MAP CONTEXT_KEY_MAP[prod-admin]/home/ops/.ssh/prod_rsa CONTEXT_KEY_MAP[staging-admin]/home/ops/.ssh/staging_rsa脚本启动时先用kubectl config current-context拿到当前 context 名称再去这个关联表里查对应的私钥CURRENT_CONTEXT$(kubectl config current-context) if [[ -n ${CONTEXT_KEY_MAP[$CURRENT_CONTEXT]:-} ]]; then SSH_PRIVATE_KEY${CONTEXT_KEY_MAP[$CURRENT_CONTEXT]} fi这样一来我只要切换 kubectl 的 contextkubectl-ssh 就会自动用对私钥。手里多个集群来回操作时几乎感觉不到工具的切换成本。4.3 批量巡检用一条命令扫完所有节点日常运维经常会遇到“所有节点的负载情况如何”“所有节点的磁盘水位怎样”这类巡检需求。虽然 ansible 这类工具也能做但如果只是临时看一眼直接用 kubectl-ssh 配合 shell 循环就够了for node in $(kubectl get nodes -o jsonpath{.items[*].metadata.name}); do echo $node kubectl ssh $node uptime df -h / | tail -1 done这里我把节点名列表从 Kubernetes API 里动态取出来而不是手写避免漏节点或写错名字。每台节点执行uptime和df -h两条命令输出简洁适合人工快速扫一遍。注意给每台节点的执行加一个超时控制防止某个节点网络不通导致整个循环卡住timeout 10 kubectl ssh $node uptime如果节点很多还可以把输出追加到一个文件里巡检完再统一分析。4.4 操作审计与权限收敛kubectl-ssh 引入了对 kubectl 的依赖这其实是把“节点登录”纳入到了集群已有的权限体系里。也就是说你可以通过 RBAC 控制谁能执行kubectl get nodes从而间接控制谁能用 kubectl-ssh 登录节点。给排障同学分配一个最小权限角色只授nodes资源的get和list权限避免把整个集群的管理员权限都放出去。这是比“把 root 密码发给所有人”安全得多的方案。另外如果要留存操作记录可以在本地用script命令包一层script -q -c kubectl ssh node-01 session-$(date %F).log这个命令会把整个交互式会话的输入输出都记录到日志文件里。对于需要满足内部审计要求的团队这是成本很低的一种方式。更高阶的做法是接审计平台但很多团队其实连这一步都没做到。5. 常见问题与排查技巧实录5.1 插件命令不生效先检查 PATH 和文件名执行kubectl ssh node-01报“unknown command”最常见的原因是 kubectl 没找到kubectl-ssh这个文件。按这个顺序排查用which kubectl-ssh确认文件是否存在、是否在 PATH 中。用kubectl plugin list确认 kubectl 能识别到这个插件。检查文件名是否包含了奇怪的后缀比如kubectl-ssh.sh。这个命名会导致 kubectl 找不到它因为 kubectl 期望的可执行文件名就是kubectl-ssh。检查执行权限chmod x必须执行。还有一个冷门坑如果你同时设置了老的KUBECTL_PLUGINS_PATH环境变量而目录里没有这个插件可能会让人误以为插件没装。实际上新版本 kubectl 已经不读这个变量直接看 PATH 就行。5.2 节点 IP 获取不到或者拿到错误地址脚本报“cannot find InternalIP for node xxx”或者连接时地址明显不对一般有三种原因。第一RBAC 权限不足。虽然你本地可能能kubectl get nodes但插件执行时如果走了不同的 kubeconfig 或环境变量可能导致get node失败。检查脚本里实际生效的KUBECONFIG是否和你预想的一致。第二jsonpath 写法在不同 kubectl 版本上的兼容性。旧版本对?(.typeInternalIP)这种过滤表达式支持得并不好。遇到这种情况改用kubectl get node -o json | jq -r ...更可靠。第三节点实际上只有一个 ExternalIP。自建集群里节点通过云厂商的 NAT 映射到外网内部网段在办公网不可达。这时需要把KUBECTL_SSH_USE_EXTERNAL_IP设为true或者把环境变量临时覆盖掉。5.3 SSH 连接失败的经典原因第一私钥权限太开放。ssh 对私钥文件权限很敏感Permissions 0777会被直接拒绝。解决办法很简单chmod 600 ~/.ssh/xxx_rsa第二known_hosts 冲突。节点重装系统或重建后IP 对应的主机指纹发生变化ssh 会报 Host key verification failed。脚本里默认关闭了 StrictHostKeyChecking但如果你自己改成了默认严格模式就会碰到这个问题。生产环境如果坚持开严格校验可以定期清理 known_hosts 里对应的旧条目。第三网络不通。InternalIP 能查出来但你的本机到节点内网没有直达路由需要走跳板机。检查路由表和配置文件里跳板机参数是否齐全。5.4 跳板机连接失败ProxyCommand 的正确姿势跳板机配置好之后却连不上节点优先检查以下几项跳板机私钥路径是否正确尤其是用了相对路径的情况。KUBECTL_SSH_JUMP_USER和KUBECTL_SSH_JUMP_HOST是否正确拼写错误非常隐蔽。跳板机本身能不能访问到节点的目标端口。有时候问题根本不在 ProxyCommand而是跳板机到节点之间也被安全组挡了。如果你把 ProxyCommand 写到了配置文件的变量里注意转义问题。变量值里如果包含空格或特殊字符ssh 解析时会出错。一个实用的验证方法是先在本地手动执行跳板机的ssh命令确认能连上再把链路拆开排查。不要指望一步到位。5.5 让排障更顺手的小技巧最后分享几个我在使用中沉淀下来的小技巧。第一给 ssh 连接加上连接超时避免网络不通时白白等待exec ssh -o ConnectTimeout5 -i $SSH_PRIVATE_KEY ...第二把kubectl ssh和tmux结合起来用。先开一个 tmux 会话在里面登录多个节点每个节点开一个窗口排障时可以快速切换视角不用反复退出登录。第三如果节点数量多又经常需要进入节点执行包管理命令可以考虑提前用ssh-copy-id把公钥批量分发到各节点这样密钥管理可以统一到一套公钥体系上。第四在脚本一开始把当前的 kubectl context 打印出来能避免“明明在 A 集群执行命令却以为自己在 B 集群”的乌龙。尤其多集群切换频繁时这个小提醒很有效。我个人在实际操作中最深的体会是这类工具一开始不必做得太完整先把最痛的一条路径打通配置、跳板机、批量操作这些能力可以等真正遇到了再逐渐加进去。Modest 的几十行脚本换来的是日常排障中反复出现且毫无价值的“找钥匙、查 IP”时间被直接清零这本身就是很划算的投入。如果你也经常在集群和节点之间来回横跳不妨照这个思路搭一个自己的 kubectl-ssh用顺手之后你大概率就回不去手动 ssh 的方式了。
RELATED

相关推荐

UML考试复习指南:高频考点与答题套路详解

UML考试复习指南:高频考点与答题套路详解

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

📅 2026/10/17 1:23:53
Elasticsearch Windows安装全攻略:从下载配置到避坑排错

Elasticsearch Windows安装全攻略:从下载配置到避坑排错

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

📅 2026/10/17 1:23:53
AI论文写作软件实测:9类工具横评与组合方案

AI论文写作软件实测:9类工具横评与组合方案

每年三四月份,我的私信里就会被同一类问题塞满——“毕业论文的正文到底怎么开始写”“开题报告憋了三天只写了两行”。今年因为AI论文写作软件遍地开花,问题升级成了:“市面上一堆AI论文辅助工具,到底哪个是真有用,哪…

📅 2026/10/17 1:23:53
MORE NEWS

更多资讯

📰

Ascend C Matmul GEMV 实战:用 CubeFormat::VECTOR 在 asc-devkit 中实现矩阵向量乘

人工智能深度学习算子库CANNAscend 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。 项目地址&…

📰

REFramework 完整指南:RE Engine 游戏模组框架与 Lua 脚本平台快速跑通

REFramework 完整指南:RE Engine 游戏模组框架与 Lua 脚本平台快速跑通 【免费下载链接】REFramework Mod loader, scripting platform, and VR support for all RE Engine games 项目地址: https://gitcode.com/GitHub_Trending/re/REFramework REFramework…

📰

DeepFilterNet ONNX 导出与跨平台部署:从导出命令到三条集成路径的完整教程

DeepFilterNet ONNX 导出与跨平台部署:从导出命令到三条集成路径的完整教程 【免费下载链接】DeepFilterNet Noise supression using deep filtering 项目地址: https://gitcode.com/GitHub_Trending/de/DeepFilterNet DeepFilterNet 是一个面向 48kHz 全频带…

📰

CloudCompare点云处理实战:从激光雷达数据到OBJ建模全流程

简介:CloudCompare是一款面向三维点云处理领域的开源跨平台软件,适用于测绘、逆向工程、计算机视觉及地理信息系统(GIS)等方向的研究者与工程师,可高效完成法向量计算与优化、泊松曲面重建、点云滤波、配准与可视化等核…

📰

Flutter开发OpenHarmony离线Web开发助手App:JavaScript参考模块实战

如果你手里同时握着几张牌:一段还算扎实的Flutter开发经验、一台能跑OpenHarmony的设备,以及“写JavaScript时总得翻语法”的老毛病,那么把这三种需求压成一个离线App,会是件相当顺手的事。这篇就是我从零搭一个Web开发助手App的实…

📰

SQL Developer 4.0.3.16.84 配置与避坑实战指南

简介:Oracle SQL Developer 4.0.3.16.84-x64 是 Oracle 官方推出的免费数据库图形化管理工具,面向开发人员、DBA 及数据分析人员,适用于连接、查询、建模、迁移、调优等日常操作,界面直观、对新手友好。压缩包共 2000 个文件&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬