0. Environment:
Server machine: CentOS 6.3 x86
Client machine: Windows 10 Pro x86_64
1. Install ssh server
[server machine shell]
#yum install openssh openssh-server
#chkconfig sshd on
#/etc/init.d/sshd start
2. Create user git
[server machine shell]
#useradd git
#passwd git
3. Create an empty repository
[server machine shell]
#cd /home/git
#git init --bare sample.git
#chown -R git:git sample.git
4. Conifigure ssh client in client machine
Download Git for Windows from https://git-for-windows.github.io/
Direct link(for 64bit system): https://github.com/git-for-windows/git/releases/download/v2.6.1.windows.1/Git-2.6.1-64-bit.exe
Install it to default location(C:\Program Files\Git), add C:\Program Files\Git\usr\bin to system environment PATH
Adding C:\Program Files\Git\usr\bin to PATH to enable command ssh and ssh-keygen in cmd.exe
Replace the email address with yours to generate public & private ssh keys
[client machine cmd]
>ssh-keygen -t rsa -C "my_email@hotmail.com"
Press Enter three times to accept default setting, sample output
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/<your account name>/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/<your account name>/.ssh/id_rsa.
Your public key has been saved in /c/Users/<your account name>/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+GR+6jWy7FtN3hFBszUCq08nk3fzlIBPzI0AbTkwOo4 my_email@hotmail.com
The key's randomart image is:
+---[RSA 2048]----+
| ++ooo+..|
| . .=* +=.|
| o .o.*o. |
| o.. . + ...|
| E..S. =.+.+.|
| = o+=..oo|
| + =.o . .|
| . B . |
| oB. |
+----[SHA256]-----+
5. Transfer client machine's public key to server machine to enable login without password
[client machine cmd]
>ssh git@<server address> $midkr .ssh
$chmod .ssh
$cd .ssh
$touch authorized_keys
$chmod 600 authorized_keys
Sample output
The authenticity of host '<server address> (<server address>)' can't be established.
RSA key fingerprint is SHA256:hsFlk18MlWP3wtNVGKcBrZijZMvCjsdlhJg/SPAn9Z0.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '<server address>' (RSA) to the list of known hosts.
git@<server address>'s password:
Last login: Sun Oct 18 07:58:35 2015 from <client ip>
[git@localhost ~]$ mkdir .ssh
[git@localhost ~]$ chmod 700 .ssh
[git@localhost ~]$ cd .ssh
[git@localhost .ssh]$ touch authorized_keys
[git@localhost .ssh]$ chmod 600 authorized_keys
Append client's public key to server's authorized_keys file by copy-and-paste
[client machine cmd -> connected to server via ssh]
$vi ~/.ssh/authorized_keys
client machine public key location: %USERPROFILE%\.ssh\id_rsa.pub
server machine authorized_keys file location: /home/git/.ssh/authorized_keys
Sample authorized_keys file
[git@localhost ~]$ vi .ssh/authorized_keys
aaarticlea/png;base64,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" alt="" />
Logout from server and connect again to test, if ssh doesn't prompt for password, your configuration for ssh is correct.
6. Clone remote repository
[client machine cmd]
>git clone git@<server address>:sample.git
7. Test
Create a README.md file and push to server repository
[client machine cmd]
>touch README.md
>notepad README.md #input some content into README.md, then save
>git add README.md
>git commit -m "Intial commit for sample project"
>git push origin master
8 Done. if you want to submit code in another machine, you need to:
a. Append the public key of the new machine to server's authorized_keys file
b. Clone repository to new machine
c. Modify the files in new machine local repository, and push to server(remote repository)
If you don't want the user git login into server via shell, you can modify the type of shell for this user
[server machine shell]
#vi /etc/passwd
Locate to the end of file, change git:**********/bin/bash to git:**********/usr/bin/git-shell
After that, user still can use name git to push their code to server, but login via ssh is denied
C:\Users\<account name>>ssh git@<server address>
Last login: Sun Oct 18 10:42:30 2015 from <client ip>
fatal: What do you think I am? A shell?
Connection to 192.168.1.109 closed.C:\Users\<account name>>