在线上运维tidb的过程中,遇到一个问题:使用tiup工具在服务器a上扩容tidb节点时,扩容命令提示ssh配置报错。报错内容如下:
Error: executor.ssh.execute_failed: Failed to execute command over SSH for ‘root@10.xxx.xx.128:26387’ {ssh_stderr: , ssh_stdout: , ssh_command: export; PATH=$PATH:/usr/bin:/usr/sbin sudo -H bash -c “test -d /tmp || (mkdir -p /tmp && chown root:$(id -g -n root) /tmp)”}, cause: ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
然而,手动从管理机器执行ssh远程登录服务器A时,并没有报错。
通常情况下,我们会使用以下命令查看TiDB集群的配置:
tiup cluster check cluster_name --cluster
在使用此命令查看TiDB集群配置时,发现部分节点的状态显示为Error,正常情况下应该都是Done。
根据官方文档的提示(如下图),我们花了很长时间排查问题,但始终未能解决。
于是,我们在asktug上提出了一个问题:
https://www.php.cn/link/d5a1469d699bdf9fdc74cc29643034bf
最终得到了答案:
TiDB依赖的SSH秘钥与管理机的SSH秘钥不一致。
我们分别解释一下这两个秘钥的概念:
1、TiDB依赖的SSH秘钥。
在执行tiup cluster list命令列举tiup管理的集群信息后,输出结果中已经包含了TiDB依赖的SSH秘钥:
[root@ ~]# tiup cluster listStarting component `cluster`: /root/.tiup/components/cluster/v1.8.0/tiup-cluster listName User Version Path PrivateKey---- ---- ------- ---- ----------tidb_lock root v5.0.0 /root/.tiup/storage/cluster/clusters/tidb_lock /root/.tiup/storage/cluster/clusters/tidb_lock/ssh/id_rsa
最后一行最右侧即为TiDB依赖的SSH秘钥。
2、管理机的SSH秘钥
这实际上是我们配置SSH互信时使用的秘钥,通常位于当前用户目录下的~/.ssh/id_rsa和~/.ssh/id_rsa.pub这两个文件中。
如果你的用户是root,那么~应该替换为/root。
这两个秘钥在初始化时应该是相同的。然而,由于在管理机上执行了ssh-keygen命令,重新生成了新的秘钥,覆盖了管理机原来的~/.ssh/id_rsa和~/.ssh/id_rsa.pub文件,导致二者不一致,最终产生了报错。
解决方案:
以TiDB使用的秘钥为准,覆盖用户目录下的~/.ssh/id_rsa和~/.ssh/id_rsa.pub秘钥即可。
虽然这个问题已经解决,但在解决过程中,官方人员提供了一个详细的TiDB部署时涉及的账号文档,让我对这些账号有了进一步的理解:
https://www.php.cn/link/c0f3a9cc8c0672341632498cdfb3fff9
文档从以下三个维度对TiDB的账户进行了分析:
1、运行 tiup 的账户 2、集群节点上的高权限账户 3、集群服务账户
有兴趣的同学一定不要错过。
以上就是TiDB SSH互信配置案例一例的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号