69
votes

I need to recover/reset the admin password for JetBrain's TeamCity.

I have full RDP access to the server so no problems there. It's just been 2 months since we used it so now I have forgotten my login - my usual ones don't work.

It is setup without a database at the moment, so was hoping the usernames would just be in a file somewhere, but no luck finding it so far.

19
Thanks guys for your answers. Turns out that somebody remembered a password and we got in without needing to resort to these solutions. I've voted you all up for the help.Jack Ukleja
The best response for currently newest Teamcity (version 8) is last, here is permalink - stackoverflow.com/a/18735441/237858nikib3ro

19 Answers

81
votes

From TeamCity 8 you can log in as a super user and change the password that way. You just need to use an empty username and last occurrence of the "super user authentication token" found in the logs\teamcity-server.log file as your password.

Please see the following for more information:

42
votes

In case none of those works, see http://sebastienlachance.com/post/Resetting-TeamCity-Password.aspx.

Open a command prompt and go to \webapps\ROOT\WEB-INF\lib folder. Now type the following :

..\..\..\..\jre\bin\java.exe -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword username newpassword
5
votes

For TeamCity 6.5.4

From a command prompt in the [TeamCity install folder]\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

My username was 'admin' in my case (I think I set it during installation but I can't be sure).

I ommitted the path to TeamCity argument, it's smart enough to use the correct path (mine was c:\users\administrator.BuildServer)

When I provided the (wrong) path to TeamCity as an argument I received this message:

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)

In case this confuses other people too.

4
votes

You could try to reset the installation of TeamCity, by removing TeamCity data directory ($/.BuildServer directory by default)

4
votes

Super user direct URL :

http://servername:port/login.html?super=1

Open TeamCity log folder (Example C: drive: C:\TeamCity\logs) : teamcity-server.log, find the key: “Super user authentication”

[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)
3
votes

Try the following:

First stop the TeamCity service (would also stop the build agent if installed). Next open up a console, go to your java directory and run the following command from there:

java.exe -cp server.jar; hsqldb.jar ChangePassword USERNAME PASSWORD "PATH_TO_YOUR_TEAMCITY_INSTALLATION".BuildServer
3
votes

I've just had to go through this pain with v5 EAP.

I managed to reset the password successfully by running:

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

Although you'll need to substitute C:\TeamCity with wherever your installation is located.

2
votes

In case this helps someone else, whoever installed TeamCity on my server placed the build directory under the Administrator's Profile, not in C:\TeamCity.

2
votes

Specifically for TeamCity running on Tomcat on Windows it will be C:\ProgramData\JetBrains\TeamCity

The directory specified as the last parameter needs to be your Data Directory (find in /logs/teamcity-server.log)

You'll get the 'Table not found' error if you don't have this correct.

You'll get a 'The database is already in use' error if you've got TeamCity running.

you can also search you /logs/teamcity-server.log to see whether you created admin, administrator, or some other admin user name.

2
votes

For everyone that may arrive at this article years after the original answer like I just did, there's a built-in super user account, and the password is regenerated every time team city is started, and the password is in the log. You can use this super user to login and reset any passwords. It's super easy.

https://confluence.jetbrains.com/display/TCD9/Super+User

1
votes

TeamCity always uses a database - if you haven't explicitly configured one, it uses a HSQLDB database to store data internally.

When using an external database, user information is stored within that database, so it seems pretty likely that the user information in your case will be stored within the HSQLDB system.

You might be able to gain access to the system by futzing around with the database - but I'd suggest taking a backup first.

Second suggestion - drop the support guys at JetBrains an email. Even before my workplace splashed out on a TeamCity Enterprise license, their support was superb - fast, accurate and helpful.

1
votes

With TeamCity 5 using MySQL (probably other versions and RDBMs as well, but untested), it's possible to update the password directly via SQL:

mysql> update users set password = md5("mypass123") where username = "bob";

Nevertheless, I'd stick with the CLI versions already mentioned by others if there isn't a good reason not to do so.

1
votes

First point is if you logout the login screen has the username 'TCAdmin' already filled in, when it should be 'administrator'. TCAdmin is the full name of (I think) the default version 5 admin user. Changing that to administrator and then using the password I thought it was solved my issue.

For resetting... In case it helps someone else on Windows XP on version 5 of TeamCity, my .BuildServer config info was also under my current logged in user's documents and settings folder. Also I was tripped up by a space in the list of jar files in Sebastien's good answer above.

So I changed to this directory in a command prompt:

 c:\teamcity\webapps\ROOT\WEB-INF\lib 

and then this command line (to set password: Password1) worked for me:

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

Which gave output:

Using TeamCity configuration directory path: C:/Documents and Settings/tamw/.BuildServer 
Password changed successfuly
1
votes
  1. Stop teamcity
  2. You should pass path to your buildserver e.g. if you installed build server to dir "c:\.BuildServer"

........\jre\bin\java.exe -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword username newpassword c:\.BuildServer

1
votes

To change user password:

Shutdown server

Switch to the /webapps/ROOT/WEB-INF/lib directory

Invoke the following command:

Windows platform: java -cp server.jar;common-api.jar;commons-codec-1.3.jar;util.jar;hsqldb.jar ChangePassword

Unix platform: java -cp server.jar:common-api.jar:commons-codec-1.3.jar:util.jar:hsqldb.jar ChangePassword

You can skip the option, if you are using default path for TeamCity data files: /.BuildServer

[Ref: http://confluence.jetbrains.com/display/TCD7/Changing+user+password+with+default+authentication+scheme]

1
votes

Here's what worked for me.

Shut down server services

> cd c:\TeamCity\webapps\ROOT\WEB-INF\lib>

then

> ..\..\..\..\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\

Without the path at the end, it would fail with:

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)
1
votes

We are using Teamcity 7 with MS SQL Server as the RDBMS.

To reset your password you can use the following query:

UPDATE users SET password = LOWER(SUBSTRING(sys.fn_sqlvarbasetostr(HASHBYTES('md5','your_new_password')),3,32))
 where username = "your_user_name";
0
votes

Alternatively, You could use the TeamCity Server Log and retrieve the Super User token.

Using the token, go to the URL : http://(server):(port)/login.html?super=1

ie: http://localhost:92/login.html?super=1

Once you logged in, you could always create a new user or reset the password for the account in question.

0
votes

I passed in the same situation and did login with super user, follow steps below:

1 - Get Token in the "teamcity-server.log" in the path "XX:\TeamCity\logs";

2 - Access and login using token at url: "/login.html?super=1";

More about it:

https://confluence.jetbrains.com/display/TCD18/Super+User