# create a git user on debian, `sudo adduser git` switch to git user with `sudo su -l git` create a `.ssh` dir in the git user's home dir and make it only accessible by the git user ``` mkdir ~/.ssh chmod 700 ~/.ssh ``` create an `authorized_keys` file in the `.ssh` folder, and make it accessible only by the git user ``` touch .ssh/authorized_keys chmod 600 `.ssh/authorized_keys` ``` create a private/public key pair locally to authenticate a user on a machine to connect to the remote server ``` ssh-keygen -t rsa ``` and finally copy it into the (remote) git user's `.ssh/authorized_keys`, for example using `ssh-copy-id` or giving the public key to the server administrator. # creating bare git repositories create directories within git's home dir (nested paths are allowed) with the `.git` extension, for example `my-projects/my-repo.git` or just `my-repo.git`. ``` git init --bare repo.git ``` there now exists an empty git repository on the server. the remote can now be added to a local repository ``` git remote add origin git@server:my-repo.git git push -u origin main ``` # connecting using the key add an entry to your local `.ssh/config` ``` Host myhost HostName example.com User git IdentityFile ~/.ssh/id_rsa ``` and connect with ``` ssh myhost ```