uncategorized

ssh的用户配置文件config

由于最近公司代码管理要从svn向git转换, 我就尝试在docker容器尝试搭建一个gitl
ab
的环境给it部门的人熟悉练习, 把我们的代码想git转移.因为是在docker容器
里面搭建的环境, 虽然gitlab提供了ssh协议和http协议的方式来获取和推送代码, 但
是在我们是无法使用ssh协议的.(一开始我是这么认为的).

* [docker][1]容器把端口进行了映射, 80端口映射到了32773, 22端口映射到了32770

因为http的话clone代码是这样的, 我们可以在请求的url中改变默认的端口80到32773

1
git clone http://gitlab:32773/xxxx/xxxx.git

但是如果我们使用ssh协议的话, 下面的做法是不行的, @前面的git指用户, gitlab
host, 这里我们没有办法改变ssh的22端口32770端口的, 有时候我们在终端下面可以
使用ssh -p 端口号来指定端口号去连接, 这里我们没法做到的, 我们使用的git客户
端工具是sourcetree

1
git clone git@gitlab:xxxx/xxxx.git

由于刚开始我认识ssh协议在使用docker作为gitlab的搭建环境时, 没法用时,
我建议同事就使用http协议来拉取和推送代码好了(每次都要输入密码的), 毕竟也就是先用
docker来熟悉熟悉环境的.

就这样, 第一和远程关联也没啥问题, 同事也就用了, 然后问题就来了, 同事有一次提交了
4.xG的文件, 我的天啦, 4.xG的东西, 想想都觉的恐怖, 然后服务器提示了这样的错误

1
2
3
4
5
6
7
8
git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree push -v --tags origin refs/heads/master:refs/heads/master 
Pushing to http://192.168.1.18:32773/unity/pinyin.git
POST git-receive-pack (chunked)
error: RPC failed; result=22, HTTP code = 413
fatal: The remote end hung up unexpectedly
fatal: The remote end hung up unexpectedly
Everything up-to-date
Completed with errors, see above

远程的服务器被挂起了, 找了一段时间的原因, 其实以前也碰到过这样的问题, 一时没想起
来, gitlab是使用nginx来当做http服务器的, nginx对上传文件的大小有
限制, 以前为这个原因也改过phpnginx的配置了. 因为我没法进去docker的容器
去修改配置文件, 那也只能使用ssh协议了.

问题是怎么解决ssh的端口问题, clone的时候不用默认的22端口, 后来在晚上找了点资料
,原来ssh是有配置文件的. 是~/.ssh/config文件, 它的格式是这样的, 也可以在终端下输
man ssh__config来获取详细帮助

1
2
3
4
5
Host    别名
HostName 主机名
Port 端口
User 用户名
IdentityFile 密钥文件的路径

这里的提示已经很清楚了, Identityfile是就是密钥文件路径, 通过ssh-keygen -t rsa -C ''
产生, 对应上面的格式写一段配置

1
2
3
4
5
Host    gitlab
HostName 192.168.1.18
Port 32770
User git
IdentityFile ~/.ssh/id_rsa

好了, 当我们使用git clone git@gitlab:xxxx/xxxx.git, 因为我们clone的是gitlab这
个主机, 所以就会采用我们上面的这个配置. 这样我们就在sourcetree里面解决端口
的问题了, 哇, ssh真是太棒了…., 4.xG的大文件, 也可以弄上去, 毕竟是内网, 不然我
估计也不会让他传了….., 每次瞎折腾都能学点东西.

参考:

  1. 利用 ssh 的用户配置文件 config 管理 ssh 会话
  2. OpenSSH SSH client configuration files