配置本地ssh通过密钥链接阿里云服务器,及在服务器搭建git仓库

配置环境

server:centerOS 7
client:macOS 10.12

1.非对称加密

相对于对称加密所需要的一个密钥而言,非对称加密存在公钥和私钥,公钥存放在服务器,私钥存放在客户端

1.Mac下通过命令生成的private,public密钥会存放在~/.ssh目录下,其中后缀为.pub为公钥
2.目录下的known_hosts存放密钥第一次认证是的记录
3.管理多个密钥

  • ssh-keygen生成密钥
1
2
3
4
5
6
7
8
# 查看ssh-keygen命令参数,及使用
$ssh-keygen --help
# t参数表示加密类型,C表示注释
$ssh-keygen -t rsa -C "comment"
# 查看密钥
$ll ~/.ssh
  • ssh-add命令把专用密钥添加到 ssh-agent 的高速缓存中
1
2
3
4
5
6
7
8
# 添加
$ssh-add <path/to/privateKey>
# 查看
$ssh-add -l
# 删除
$ssh-add -d <path/to/privateKey>
  • 管理多个密钥

方法一:
在ssh链接是加上指定的identity_file

1
2
# 链接
$ssh -i <path/to/identity_file> <user>@<ip>

方法二
通过ssh-add密钥添加到高速缓存,缺点电脑重启后会清空缓存

1
2
3
4
# 添加到高速缓存
$ssh-add <path/to/privateKey>
# 链接
$ssh <user>@<ip>

方法三
配置config文件,实现持久化(未实践)

2.ssh密钥登录linux

1
2
3
4
5
6
7
8
# 导入mac生成的public key到
$cat <path/publicKey> > ~/.ssh/authorized_keys
# 退出服务器
$exit
# 重新链接
$ssh <path/to/identity_file> <user>@<ip>

3.git服务器

通过git init新建仓库,客户端提交代码到仓库。
需要注意的是客户端提交的项目并没有在git仓库映射,需要自己新建工作目录。
通过githooks实现自动化部署,及当客户端提交到远程服务器是不触发hooks,通过编写的脚本实现项目拷贝

  • 新建git库
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在服务器上创建一个新用户
$useradd git
# 创建一个Git仓库
$cd <切换到希望创建工作区的目录>
# 创建一个Git仓库,此时Git会创建一个唯一分支master
$git init --bare
# 将sample.git的所有权从root修改到新创建的git
$chown -R git:git
# 导入mac生成的public key到,需要自己创建
$cat <path/publicKey> > /home/git/.ssh/authorized_keys
# 禁止用户git通过shell进行登录
# 修改文件/etc/passwd下git:x:1000:1000::/home/git:/bin/bash
$git:x:1000:1000::/home/git:/usr/bin/git-shell
# 在客户端clone远程git仓库
$git clone git@115.28.222.133:<git/repository/path>
  • git hooks自动部署
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 新建项目目录
$cd <path/to/dir>
$mkdir <dir>
# clone
$git clone <git/repository/path>
# 常见错误:remote: error: 无法打开 .git/FETCH_HEAD:权限被拒绝
# 解决办法:赋予.git/目录拥有者权限:
$chown -R git:git <dir>
# 修改仓库hooks
# post-update.sample改名为post-update
--------start--------
#!/bin/sh
unset GIT_DIR
NowPath=`pwd`
DeployPath="/var/www/html/testDeploy/sample"
cd $DeployPath
git pull origin master
cd $NowPath
exit 0
--------end--------
# 修改文件权限
$chmod +x post-update

4.git链接

  • 服务器
1
2
3
4
5
6
$cd <git/server/path>
$git init --bare <ptoject_name.git>
$cd <project/path>
$git clone /data/git/recharge_pro.git
$git pull
  • 客户端

本地项目初始git,上传

1
2
3
4
5
6
$cd <project/path>
$git init
$git remote add origin git@<ip>:</git/project/path>
$git add .
$git commit -m ''
$git Push

clone

1
$git clone git@<ip>:</git/project/path>

参考

用 Git Hooks 进行自动部署
Centos7下搭建Git服务器端教程(二)
如何通过Git钩子自动部署(Push to Deploy)