搭建git服务器
搭建内网 Git 让代码提交更方便与安全。
安装git
首先你得有一台服务器,然后在此服务器上安装git.
如果你想从源码安装 Git,需要安装 Git 依赖的库:curl
、zlib
、openssl
、expat
,还有libiconv
。
安装依赖
- Centos:
sudo yum install dh-autoreconf curl-devel expat-devel gettext-devel openssl-devel zlib-devel getopt
sudo yum install asciidoc xmlto docbook2x
- ubuntu:
sudo apt-get install dh-autoreconf libcurl4-gnutls-dev libexpat1-dev gettext libz-dev libssl-dev install-info getopt
sudo apt-get install asciidoc xmlto docbook2x
下载git源码包
当你安装好所有的必要依赖,你可以继续从几个地方来取得git最新发布版本的 tar 包。
你可以从Kernel.org
网站获取,网址为 https://www.kernel.org/pub/software/scm/git
或从 GitHub 网站上的镜像来获得,网址为 https://github.com/git/git/releases
通常在 GitHub 上的是最新版本,但 kernel.org 上包含有文件下载签名,如果你想验证下载正确性的话会用到。
编译并安装git
tar -zxf git-2.0.0.tar.gz
cd git-2.0.0
make configure
./configure --prefix=/usr
sudo ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi #Centos上要执行,ubuntu上不用执行
make all doc info
sudo make install install-doc install-html install-info
sudo ln -s /opt/git/bin/git /usr/bin/git
升级git版本
git clone git://git.kernel.org/pub/scm/git/git.git
自此git安装完成.
上传ssh key到vps
在本地(个人PC)执行下面命令
scp ~/.ssh/id_rsa_vpsgit.pub root@blog.xujianhui.cn:/home/
在git服务器上以具有root权限的账户执行如下命令:
useradd git
mkdir -p /home/git/.ssh
cat /home/id_rsa.vpsgit.pub > /home/git/.ssh/authorized_keys
chown -R git:git /home/git/.ssh
chmod 700 /home/git/.ssh
chmod 644 /home/git/.ssh/authorized_keys
限制git登录shell
- 启用git-shell
vim /etc/shells
添加
/opt/git/bin/git-shell
# 这里需改为git-shell的实际路径,一般在/usr/bin/git-shell
source /etc/shells
以git账号登录系统执行下面的命令
chsh -s /opt/git/bin/git-shell
# 这里需改为git-shell的实际路径,一般在/usr/bin/git-shell
mkdir $HOME/git-shell-commands
cat >$HOME/git-shell-commands/no-interactive-login <<\EOF
#!/bin/sh
printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not"
printf '%s\n' "provide interactive shell access."
exit 128
EOF
chmod +x $HOME/git-shell-commands/no-interactive-login
- 测试git登录
ssh -p 20222 git@106.14.118.68
输出如下内容表示git账号不能登录shell了。
Last login: Sun Sep 23 12:05:08 2018 from 101.45.158.9
Welcome to Alibaba Cloud Elastic Compute Service !
Hi git! You’ve successfully authenticated, but I do not
provide interactive shell access.
DANGER
报错fatal: protocol error: bad line length character: This可能跟禁用了git账号登录有关
在git服务器上创建裸仓库及钩子
下面的操作是在git服务器上执行
- 创建裸仓库
mkdir -p /home/git/blogdata
chown git:git /home/git/blogdata
cd /home/git/blogdata
git init --bare blog.git 创建裸仓库,只用来共享
chown -R git:git blog.git
sudo ln -s /usr/local/git/bin/git-upload-pack /usr/bin/git-upload-pack
sudo ln -s /usr/local/git/bin/git-receive-pack /usr/bin/git-receive-pack
- 创建hooks钩子
vim /home/git/blogdata/blog.git/hooks/post-receive
写入如下内容
#!/bin/sh
git --work-tree=/home/git/hexo --git-dir=/home/git/blogdata/blog.git checkout -f
添加执行权限 chmod +x post-receive
这样通过hexo d
的文件就存储在/home/git/hexo
里了,然后通过nginx发布heox的静态文件即可。
clone仓库到本地及创建远程仓库
下面的命令在本地机器上执行
- clone仓库到本地
mkdir ~/gitdata
cd ~/gitdata
git clone git@blog.xujianhui.cn:/home/git/blogdata/blog.git //clone仓库到本地
- 创建远程仓库
git remote add origin git@blog.xujianhui.cn:/home/git/blogdata/blog.git
TIP
origin名称可替换成别的名字.
- 测试
git config --global user.email "myjerrysuu@163.com"
git config --global user.name "xujh"
mkdir ~/gitdata
cd ~/gitdata
git clone git@blog.xujianhui.cn:/home/git/blogdata/blog.git
cd blog
echo "test git" > ~/gitdata/blog/gittest.txt
git add gittest.txt
git status //查看git状态
git commit -m "first commit"
git push -u origin master //origin为git remote add的名称
TIP
先git clone–> git add –>git commit–> git push到服务器,查看/home/git/hexo
有没有刚刚提交的文件,如果有,则成功.
修改~/.gitconfig文件即可修改git config 配置
配置多个ssh key
现在我需要把hexo发布到github、gcoding、vps,所以需要配置三个sshkey
分别是coding、github、vps,下面的操作都是在本机上执行.
ssh-keygen -t rsa -b 4096 -C "myjerrysuu@163.com" -f ~/.ssh/id_rsa_coding
ssh-keygen -t rsa -b 4096 -C "myjerrysuu@163.com" -f ~/.ssh/id_rsa_github
ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa_vpsgit
输入完命令后可以直接回车。
然后会在~/.ssh
目录下生成6个文件,分别是
id_rsa_coding id_rsa_coding.pub
id_rsa_github id_rsa_github.pub
id_rsa_vpsgit id_rsa_vpsgit.pub
切记
密钥是一对的,其中.pub
结尾的是公钥,是要放置到github、coding、vps等服务器上的
私钥需要保存在本地,私钥一定要好好保存.
- git全局设置
git config –global user.email “myjerrysuu@163.com“
git config –global user.name “xujh”
上面的操作是告诉git是谁执行的操作.
下面的命令查看当前的user.name和user.email值
git config user.name
git config user.email
将~/.ssh
下的私钥添加到ssh-agent
ssh-add ~/.ssh/id_rsa_coding
ssh-add ~/.ssh/id_rsa_github
ssh-add ~/.ssh/id_rsa_vpsgit
ssh-add -l
查看已经有的ssh-key
ssh-add -D
删除所有ssh-key
ssh-add参数:
- -D:删除ssh-agent中的所有密钥.
- -d:从ssh-agent中的删除密钥
- -e pkcs11:删除PKCS#11共享库pkcs1提供的钥匙。
- -s pkcs11:添加PKCS#11共享库pkcs1提供的钥匙。
- -L:显示ssh-agent中的公钥
- -l:显示ssh-agent中的密钥
- -t life:对加载的密钥设置超时时间,超时ssh-agent将自动卸载密钥
- -X:对ssh-agent进行解锁
- -x:对ssh-agent进行加锁
如果在zsh中执行ssh-add
报错Could not open a connection to your authentication agent
;
则需要将eval "$(ssh-agent -s)"
写到~/.zshrc
文件末尾,并执行source ~/.zshrc
,然后在执行ssh-add
命令.
ssh-add 这个命令不是用来永久性的记住你所使用的私钥的。
实际上,它的作用只是把你指定的私钥添加到 ssh-agent 所管理的一个session 当中。
而 ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent服务也就重置了
- 在zsh中永久使用ssh-add
vim ~/.zshrc
在其末尾添加
eval "$(ssh-agent -s)" 2>/dev/null
ssh-add ~/.ssh/id_rsa_coding 2>/dev/null
ssh-add ~/.ssh/id_rsa_github 2>/dev/null
ssh-add ~/.ssh/id_rsa_vpsgit 2>/dev/null
ssh-add ~/.ssh/id_rsa_pi 2>/dev/null
source ~/.zshrc
- 创建ssh config文件
git会先从ssh-agent
查找,如果ssh-agent
中没有就会在~/.ssh/config
中查找
vim ~/.ssh/config
添加内容如下:
# coding
Host coding.net
HostName coding.net
PreferredAuthentications publickey
User myjerrysuu@163.com
IdentityFile ~/.ssh/id_rsa_coding
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
User myjerrysuu@163.com
IdentityFile ~/.ssh/id_rsa_github
# vpsgit
Host blog.xujianhui.cn
HostName blog.xujianhui.cn
PreferredAuthentications publickey
User git
IdentityFile ~/.ssh/id_rsa_vpsgit
# raspyPi
Host raspyPi
HostName raspyPi
PreferredAuthentications publickey
User pi
IdentityFile ~/.ssh/id_rsa_pi
# vagrant1
Host 192.168.1.19
HostName 192.168.1.19
PreferredAuthentications publickey
User echoxu
Port 10222
IdentityFile ~/.ssh/id_rsa_vagrant
配置文件参数
- Host : Host可以看作是一个你要识别的模式,对识别的模式,进行配置对应的的主机名和ssh文件
- HostName : 要登录主机的主机名
- User : 登录名
- IdentityFile : 指明上面User对应的identityFile路径
提交代码到 Github
chmod 600 ~/.ssh/config
chmod 600 ~/.ssh/id_rsa_github
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa_github
ssh-add -l 查看已添加的 key
git config --global user.name '你的名称'
git config --global user.email '你的Email'
git config --global --list 查看配置
mkdir -p /home/iechoxu/workfiles/Apps/obsidian_orange
cd /home/iechoxu/workfiles/Apps/obsidian_orange
git init
git remote add note git@gitee.com:iEchoxu/obsidian_orange.git
git remote add notehub git@github.com:iEchoxu/obsidian_orange.git
git branch -m main # 切换到 main 分支
git push note main
ssh -vT git@github.com # 测试 ssh 密钥是否能链接 Github
sshconfig 配置
vim ~/.ssh/config,文件权限为 600
# gitee gitee 添加个人公钥管理----部署公钥管理---添加公钥---添加个人公钥
Host gitee.com
HostName gitee.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_minio
# github
Host github.com
HostName github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_rsa_github