我需要恢复/重置 JetBrain 的TeamCity的管理员密码。
我对服务器有完全的 RDP 访问权限,所以那里没有问题。我们使用它才 2 个月,所以现在我忘记了我的登录 - 我通常的登录不起作用。
目前它是在没有数据库的情况下设置的,所以希望用户名只是在某个文件中,但到目前为止还没有找到它。
我需要恢复/重置 JetBrain 的TeamCity的管理员密码。
我对服务器有完全的 RDP 访问权限,所以那里没有问题。我们使用它才 2 个月,所以现在我忘记了我的登录 - 我通常的登录不起作用。
目前它是在没有数据库的情况下设置的,所以希望用户名只是在某个文件中,但到目前为止还没有找到它。
在 TeamCity 8 中,您可以以超级用户身份登录并以这种方式更改密码。您只需要使用一个空的用户名和最后一次出现在 logs\teamcity-server.log 文件中的“超级用户身份验证令牌”作为您的密码。
有关更多信息,请参阅以下内容:
如果这些都不起作用,请参阅http://sebastienlachance.com/post/Resetting-TeamCity-Password.aspx。
打开命令提示符并转到 \webapps\ROOT\WEB-INF\lib 文件夹。现在输入以下内容:
..\..\..\..\jre\bin\java.exe -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword username newpassword
对于 TeamCity 6.5.4
从 [TeamCity 安装文件夹]\webapps\ROOT\WEB-INF\lib 中的命令提示符:
..\..\..\..\jre\bin\java -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword admin NewPassword
在我的情况下,我的用户名是“admin”(我想我是在安装过程中设置的,但我不能确定)。
我省略了 TeamCity 参数的路径,它足够聪明,可以使用正确的路径(我的是 c:\users\administrator.BuildServer)
当我提供到 TeamCity 的(错误的)路径作为参数时,我收到了这条消息:
Using TeamCity configuration directory path: c:/TeamCity/.BuildServer
Exception in thread "main" java.sql.SQLException: Table not found in statement [UPDATE users SET PASSWORD = ? WHERE USERNAME = ? AND REALM IS NULL]
at org.hsqldb.jdbc.Util.throwError(Util.java:58)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(jdbcPreparedStatement.java:1833)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(jdbcConnection.java:580)
at ChangePassword.main(ChangePassword.java:14)
以防这也让其他人感到困惑。
您可以尝试通过删除 TeamCity 数据目录($/.BuildServer
默认为目录)来重置 TeamCity 的安装
超级用户直接网址:
http://servername:port/login.html?super=1
打开TeamCity日志文件夹(例C:盘:C:\TeamCity\logs):teamcity-server.log,找到key:“超级用户认证”
[2019-03-04 12:14:30,770] INFO - jetbrains.buildServer.SERVER - Super user authentication token: `8347518935696887114` (use empty username with the token as the password to access the server)
尝试以下操作:
首先停止 TeamCity 服务(如果安装了构建代理,也会停止)。接下来打开一个控制台,转到您的 java 目录并从那里运行以下命令:
java.exe -cp server.jar; hsqldb.jar ChangePassword USERNAME PASSWORD "PATH_TO_YOUR_TEAMCITY_INSTALLATION".BuildServer
我刚刚用 v5 EAP 经历了这种痛苦。
我设法通过运行成功重置密码:
C:\TeamCity\webapps\ROOT\WEB-INF\lib>..\..\..\..\jre\bin\java -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword admin password c:\TeamCity\.BuildServer
尽管您需要将 C:\TeamCity 替换为安装所在的位置。
万一这对其他人有帮助,无论谁在我的服务器上安装了 TeamCity,都将构建目录放置在管理员配置文件下,而不是 C:\TeamCity。
特别是对于在 Windows 上的 Tomcat 上运行的 TeamCity,它将是 C:\ProgramData\JetBrains\TeamCity
最后一个参数指定的目录需要是您的数据目录(在 /logs/teamcity-server.log 中查找)
如果不正确,您将收到“找不到表”错误。
如果您已运行 TeamCity,您将收到“数据库已在使用中”错误。
您还可以搜索 /logs/teamcity-server.log 以查看您是否创建了管理员、管理员或其他管理员用户名。
对于可能像我刚刚做的原始答案多年后到达本文的每个人,都有一个内置的超级用户帐户,并且每次启动团队城市时都会重新生成密码,并且密码在日志中。您可以使用此超级用户登录和重置任何密码。这非常容易。
TeamCity 始终使用数据库 - 如果您没有明确配置数据库,它会使用 HSQLDB 数据库在内部存储数据。
使用外部数据库时,用户信息存储在该数据库中,因此您的案例中的用户信息很可能存储在 HSQLDB 系统中。
您可能可以通过使用数据库来访问系统 - 但我建议先进行备份。
第二个建议 - 给 JetBrains 的支持人员发一封电子邮件。甚至在我的工作场所购买 TeamCity Enterprise 许可证之前,他们的支持就非常出色 - 快速、准确且乐于助人。
使用使用 MySQL 的 TeamCity 5(可能还有其他版本和 RDBM,但未经测试),可以直接通过 SQL 更新密码:
mysql> update users set password = md5("mypass123") where username = "bob";
尽管如此,如果没有充分的理由不这样做,我会坚持使用其他人已经提到的 CLI 版本。
第一点是,如果您注销登录屏幕已经填写了用户名“TCAdmin”,那么它应该是“管理员”。TCAdmin 是(我认为)默认版本 5 管理员用户的全名。将其更改为管理员,然后使用我认为解决了我的问题的密码。
重置...如果它在 TeamCity 版本 5 上的 Windows XP 上帮助其他人,我的 .BuildServer 配置信息也在我当前登录的用户的文档和设置文件夹下。我也被塞巴斯蒂安上面的好答案中的 jar 文件列表中的一个空格绊倒了。
所以我在命令提示符下切换到这个目录:
c:\teamcity\webapps\ROOT\WEB-INF\lib
然后这个命令行(设置密码:Password1)对我有用:
C:\TeamCity\webapps\ROOT\WEB-INF\lib>..\..\..\..\jre\bin\java.exe -cp server.jar;commonapi.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword administrator Password1
这给出了输出:
Using TeamCity configuration directory path: C:/Documents and Settings/tamw/.BuildServer
Password changed successfuly
........\jre\bin\java.exe -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword username newpassword c:\.构建服务器
更改用户密码:
关闭服务器
切换到 /webapps/ROOT/WEB-INF/lib 目录
调用以下命令:
Windows平台:java -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword
Unix平台:java -cp server.jar:common-api.jar:commons-codec-1.3.jar:util.jar:hsqldb.jar ChangePassword
如果您使用 TeamCity 数据文件的默认路径,则可以跳过该选项:/.BuildServer
[参考:http://confluence.jetbrains.com/display/TCD7/Changing+user+password+with+default+authentication+scheme]
这对我有用。
关闭服务器服务
> cd c:\TeamCity\webapps\ROOT\WEB-INF\lib>
然后
> ..\..\..\..\jre\bin\java.exe -cp server.jar ;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword admin password1 C:\ProgramData\JetBrains\TeamCity\
如果没有最后的路径,它将失败:
Exception in thread "main" java.sql.SQLException: Table not found in statement [
UPDATE users SET PASSWORD = ? WHERE USERNAME = ? AND REALM IS NULL]
at org.hsqldb.jdbc.Util.throwError(Util.java:58)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(jdbcPreparedStatement.ja
va:1833)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(jdbcConnection.java:5
80)
at ChangePassword.main(ChangePassword.java:14)
我们使用带有 MS SQL Server 的 Teamcity 7 作为 RDBMS。
要重置密码,您可以使用以下查询:
UPDATE users SET password = LOWER(SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('md5','your_new_password')),3,32))
where username = "your_user_name";
或者,您可以使用 TeamCity 服务器日志并检索超级用户令牌。
使用令牌,转到 URL:http://(server):(port)/login.html?super=1
即:http://localhost:92/login.html?super=1
登录后,您始终可以创建新用户或重置相关帐户的密码。
我在相同的情况下通过并使用超级用户登录,请按照以下步骤操作:
1 - 在路径“XX:\TeamCity\logs”中的“teamcity-server.log”中获取 Token;
2 - 使用 url 上的令牌访问和登录:“/login.html?super=1”;
更多关于它: