更换ssh证书导致paramiko报No session existing错误
问题出现
现在公司的发布系统使用了paramiko来执行远程操作,ssh连接用的证书被记录在配置文件里,是一个列表的形式。没错,我们的证书有很多,用来连接到不同的环境。
接到运维通知,由于安全原因,访问某台机器使用的证书做了更换。
随后没多久,就收到测试同学的反馈,发布代码时系统提示“No existing session”。
简单问题简单解决
这个问题乍看上去只要更新一下配置就可以了,简单的一批。
修改配置文件,重启系统,又重试了一次。结果,还是报这个错误。疯狂了疯狂了,配置也生效了,竟然还是不能连接吗?
问题初探
连接的代码很简单,就是单纯的连接远程机器。
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, SSH_PORT, SSH_USER, SSH_PASSWORD, key_filename=SSH_KEYS)
# ...
client.close()
通过测试,发现用命令行连接远程机器是可以的,而且也没有使用ProxyCommand之类,但是通过paramiko就出问题。毫无疑问,问题出在paramiko或者配置上。
session关键字让这个问题看起来像是paramiko的锅,它没处理好自己的会话吗?
一番google,发现了这个链接:https://stackoverflow.com/questions/6832248/paramiko-no-existing-session-exception。这个哥们也是遇到了一样的错误提示,但是他用了密码而系统查找私钥导致出错,关掉密钥查找就解决了这个问题。
看来问题出在密钥的配置上。