[[usersetup]]
== Initial Login
It's time to exit the gerrit account as you now have Gerrit running on your
host and setup your first workspace.

Start a shell with the credentials of the account you will perform
development under.

Check whether there are any ssh keys already. You're looking for two files,
id_rsa and id_rsa.pub.

----
  user@host:~$ ls .ssh
  authorized_keys  config  id_rsa  id_rsa.pub  known_hosts
  user@host:~$
----

If you have the files, you may skip the key generating step.

If you don't see the files in your listing, your will have to generate rsa
keys for your ssh sessions:

=== SSH key generation

*Please don't generate new keys if you already have a valid keypair!*
*They will be overwritten!*

----
  user@host:~$ ssh-keygen -t rsa
  Generating public/private rsa key pair.
  Enter file in which to save the key (/home/user/.ssh/id_rsa):
  Created directory '/home/user/.ssh'.
  Enter passphrase (empty for no passphrase):
  Enter same passphrase again:
  Your identification has been saved in /home/user/.ssh/id_rsa.
  Your public key has been saved in /home/user/.ssh/id_rsa.pub.
  The key fingerprint is:
  00:11:22:00:11:22:00:11:44:00:11:22:00:11:22:99 user@host
  The key's randomart image is:
  +--[ RSA 2048]----+
  |     ..+.*=+oo.*E|
  |      u.OoB.. . +|
  |       ..*.      |
  |       o         |
  |      . S ..     |
  |                 |
  |                 |
  |          ..     |
  |                 |
  +-----------------+
  user@host:~$
----

=== Registering your key in Gerrit

Open a browser and enter the canonical url of your Gerrit server.  You can
find the url in the settings file.

----
  gerrit@host:~$ git config -f $GERRIT_SITE/etc/gerrit.config gerrit.canonicalWebUrl
  http://localhost:8080/
  gerrit@host:~$
----

Register a new account in Gerrit through the web interface with the
email address of your choice.

The default authentication type is OpenID.  If your Gerrit server is behind a
proxy, and you are using an external OpenID provider, you will need to add the
proxy settings in the configuration file.

----
  gerrit@host:~$ git config -f $GERRIT_SITE/etc/gerrit.config --add http.proxy http://proxy:8080
  gerrit@host:~$ git config -f $GERRIT_SITE/etc/gerrit.config --add http.proxyUsername username
  gerrit@host:~$ git config -f $GERRIT_SITE/etc/gerrit.config --add http.proxyPassword password
----

Refer to the Gerrit configuration guide for more detailed information about
link:config-gerrit.html#auth[authentication] and
link:config-gerrit.html#http.proxy[proxy] settings.

The first user to sign-in and register an account will be
automatically placed into the fully privileged Administrators group,
permitting server management over the web and over SSH.  Subsequent
users will be automatically registered as unprivileged users.

Once signed in as your user, you find a little wizard to get you started.
The wizard helps you fill out:

* Real name (visible name in Gerrit)
* Register your email (it must be confirmed later)
* Select a username with which to communicate with Gerrit over ssh+git. Note
that once saved, the username cannot be changed.

* The server will ask you for an RSA public key.
That's the key we generated above, and it's time to make sure that Gerrit knows
about our new key and can identify us by it.

----
  user@host:~$ cat .ssh/id_rsa.pub
  ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA1bidOd8LAp7Vp95M1b9z+LGO96OEWzdAgBPfZPq05jUh
  jw0mIdUuvg5lhwswnNsvmnFhGbsUoXZui6jdXj7xPUWOD8feX2NNEjTAEeX7DXOhnozNAkk/Z98WUV2B
  xUBqhRi8vhVmaCM8E+JkHzAc+7/HVYBTuPUS7lYPby5w95gs3zVxrX8d1++IXg/u/F/47zUxhdaELMw2
  deD8XLhrNPx2FQ83FxrjnVvEKQJyD2OoqxbC2KcUGYJ/3fhiupn/YpnZsl5+6mfQuZRJEoZ/FH2n4DEH
  wzgBBBagBr0ZZCEkl74s4KFZp6JJw/ZSjMRXsXXXWvwcTpaUEDii708HGw== John Doe@MACHINE
  user@host:~$
----

[IMPORTANT]
Please take note of the extra line-breaks introduced in the key above
for formatting purposes. Please be sure to copy and paste your key without
line-breaks.

Copy the string starting with ssh-rsa to your clipboard and then paste it
into the box for RSA keys. Make *absolutely sure* no extra spaces or line feeds
are entered in the middle of the RSA string.

Verify that the ssh connection works for you.

----
  user@host:~$ ssh user@localhost -p 29418
  The authenticity of host '[localhost]:29418 ([127.0.0.1]:29418)' can't be established.
  RSA key fingerprint is db:07:3d:c2:94:25:b5:8d:ac:bc:b5:9e:2f:95:5f:4a.
  Are you sure you want to continue connecting (yes/no)? yes
  Warning: Permanently added '[localhost]:29418' (RSA) to the list of known hosts.

  ****    Welcome to Gerrit Code Review    ****

  Hi user, you have successfully connected over SSH.

  Unfortunately, interactive shells are disabled.
  To clone a hosted Git repository, use:

  git clone ssh://user@localhost:29418/REPOSITORY_NAME.git

  user@host:~$
----
