DBRE
#1
因为我们的服务器使用到了kerberos认证,obdiag/OCP ssh到我们的服务器上经常因为额外的klist: No credentials cache found (filename: /tmp/krb5cc_1003)输出导致一些检查失败,OCP会因为这个导致服务器导入失败。
如下图:
也就是说在执行su - oceanbase,会有额外的输出klist: No credentials cache found (filename: /tmp/krb5cc_1003)
请官方看下这个ssh登录问题,是否能消除ssh额外信息输出导致的问题
3 个赞
素素
#3
可以通过尝试 kinit oceanbase 获取登录票据用以缓存在本地。
1 个赞
DBRE
#4
这样固然可以临时解决,但是如果登录到oceanbase账户报其他的错误,比如:其他日志的输出,我想问的是,obdiag或者OCP层面有什么方式可以解决吗?
1 个赞
渠磊
#5
感觉这是个很好的问题
我理解这个是由于登录凭据的不同需要不同的认证方式么?
渠磊
#6
DBRE
#7
我的意思是说 对于ssh登录后 额外的输出,比如:klist: No credentials cache found (filename: /tmp/krb5cc_1003), obdiag或者ocp能否处理掉,否则obdiag或者ocp根据上面的返回结果来解析的话可能就报错了
靖顺
#8
obdiag ssh登录的时候用的是paramiko库, paramiko 库不直接支持GSSAPI/Kerberos认证。这个场景是需要额外适配的,对于obdiag来说可以增加一个ssh_client来处理,可能有以下几种方式:
- 使用Python的
subprocess 模块来调用系统的SSH客户端,并利用它来处理Kerberos认证。
def ssh_with_kerberos(user, host, command):
ssh_command = [
'ssh',
'-o', 'GSSAPIAuthentication=yes',
f'{user}@{host}',
command
]
result = subprocess.run(ssh_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return result.stdout, result.stderr
- 使用
sshtunnel库
obdiag这边先记录一个需求,[Enhancement]: ssh_client 支持 Kerberos 模式 · Issue #439 · oceanbase/obdiag · GitHub 。如果你们有意领取这个开发任务进行共建,可以在issue下回复“领取共建任务”, 加入obdiag SIG :https://oceanbase.github.io/docs/sig/obdiag/join_us 。无共建意愿的话,我们会评估 obdiag 排期来处理这个需求。
DBRE
#9
我上面的描述应该对ssh的登录方式关联不大吧,我想表达的意思是ssh后获取到的内容处理上是否可以做些改动,从下面这个图来看 获取的内容处理上有问题,从而有很多ERROR,但是ssh登录是没有问题的。
不知道我描述清楚了没有 
素素
#11
理解你的意思,就是因为su用户之后因为这条日志,导致其他脚本或者文件判断失败,从而发生异常。
渠磊
#13
我理解就是在这类终端执行时会额外返回 klist: No credentials cache found (filename: /tmp/krb5cc_1003) ,
比如date指令执行时会返回这样的结果
klist: No credentials cache found (filename: /tmp/krb5cc_1003) Tue Sep 24 15:10:15 CST 2024
另外想问下这种返回的信息在本地执行的时候也会有么,还是远程连接到指定节点的时候才会这样返回