适用版本: 7.x-8.x
1. 错误异常的基本描述 #
failed to get users that already exist; skipping user import 表示导入流程已经读到了本地用户和角色映射文件,但在查询目标集群现有用户列表时失败,因此跳过后续用户导入。
它强调的是“导入前的冲突检查失败”,而不是“用户文件格式错误”。
常见现象 #
- 用户迁移工具运行后没有导入任何用户。
- 日志里出现 skipping user import,同时伴随认证、连接或 TLS 相关异常。
- 同一批流程中,角色导入和用户导入可能分别失败或只失败其中之一。
2. 为什么会发生这个错误 #
源码中先解析 users_roles 文件,再调用 getUsersThatExist(...) 查询目标集群已有用户;如果这个调用失败,就会直接抛出当前异常。
常见原因包括:
- 目标集群无法访问,或者地址、端口、代理配置错误。
- 执行导入的身份缺少读取用户信息的权限。
- TLS 证书、CA 或主机名校验配置不正确。
- 集群安全状态异常,导致查询已存在用户接口不可用。
3. 如何排查和解决这个异常和解决这个异常 #
- 先确认本地用户文件与
users_roles文件本身可正常解析。 - 验证导入工具使用的连接参数、证书和认证方式。
- 检查当前执行账号是否具备读取现有用户和创建用户的权限。
- 查看目标集群安全日志,确认是否出现认证拒绝、授权拒绝或连接失败。
- 如果通过负载均衡或网关访问,确认相关接口未被安全设备屏蔽。
4. 如何解决这个错误 #
常用修复思路 #
- 修正访问目标集群的网络、代理和证书配置。
- 使用具备足够安全管理权限的账号重新执行导入。
- 如果集群安全功能本身异常,先修复安全服务可用性再做用户导入。
- 导入前先单独验证“获取现有用户”这一步,避免盲目重试整条流程。
5. 小结 #
skipping user import 并不代表用户文件一定有问题,更多时候是导入工具根本没有成功拿到目标集群现有用户列表。先修通连接和权限,通常才是正确方向。
相关错误 #
- failed-to-get-roles-that-already-exist-skipping-role-import:已存在角色检查失败
- could-not-read-users-file-path-toabsolutepath:用户文件读取失败
- failed-to-load-ssl-configuration:安全连接配置加载失败
附:日志上下文 #
MapuserToRoles = FileUserRolesStore.parseFile(usersRolesFile; logger);
SetexistingUsers;
try {
existingUsers = getUsersThatExist(terminal; env.settings(); env; options);
} catch (Exception e) {
throw new ElasticsearchException("failed to get users that already exist; skipping user import"; e);
}
if (usersToMigrate.length == 0) {
usersToMigrate = userToHashedPW.keySet().toArray(new String[userToHashedPW.size()]);
}
for (String user : usersToMigrate) {





