前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >gitlab添加ssh-keys之后克隆依然需要输入密码

gitlab添加ssh-keys之后克隆依然需要输入密码

作者头像
dogfei
发布2020-07-31 15:22:31
5.3K0
发布2020-07-31 15:22:31
举报
文章被收录于专栏:devops探索

问题描述

从电脑上拉取gitlab仓库的代码时,将本机的id_rsa.pub密钥传到gitlab上之后,使用git clone克隆代码后依然要求输入密码,本来非常简单的一个过程,但却暴漏了很多的问题,下面讲诉下解决的方法

gitlab不使用内置nginx

由于我的gitlab机器上有一个harbor服务,已经占用了80端口,所以,我考虑使用另一台nginx来反向代理gitlab机器,所以需要修改gitlab的配置文件 禁用nginx

代码语言:javascript
复制
vim /etc/gitlab/gitlab.rb
将
nginx['enable'] = true
修改为
nginx['enable'] = false

允许gitlab-workhorse监听TCP

代码语言:javascript
复制
vim /etc/gitlab/gitlab.rb
gitlab_workhorse['listen_network'] = "tcp"
gitlab_workhorse['listen_addr'] = "192.168.1.122:8181"

重载配置并重启

代码语言:javascript
复制
gitlab-ctl reconfigure
gitlab-ctl restart

配置nginx反向代理

我们在另一台装有nginx的机器配置反向代理,来代理gitlab

代码语言:javascript
复制
cat conf.d/git.conf 
upstream git-server {
        server 192.168.1.122:8181;
}

server {
        listen 80;
        server_name     git.xxxxxx.com;

        location / {
        proxy_http_version 1.1;
        proxy_redirect          off;
        proxy_set_header        Host $host;
        proxy_set_header        X-Real-IP $remote_addr;  #获取真实ip
        proxy_set_header       X-Forwarded-For   $proxy_add_x_forwarded_for; #获取代理者的真实ip
        client_max_body_size    10m;
        client_body_buffer_size 128k;
        proxy_connect_timeout   300s;
        proxy_send_timeout      300s;
        proxy_read_timeout      300s;
        proxy_buffer_size       128k;
        proxy_buffers           2 256k;
        proxy_headers_hash_max_size 512;
        proxy_headers_hash_bucket_size 64;
        proxy_busy_buffers_size 256k;
        proxy_temp_file_write_size 256k;
        proxy_pass http://git-server;
        }
}

完成以上配置,我以为这样就算完成了,但是在执行git clone克隆项目的时候依然需要输入密码,各种谷歌,依然没有找到问题的所在,直到看到一篇博客,就像看到了一颗救命稻草,感谢: https://blog.hobairiku.site/2018/02/26/gitlab-setup/#%E9%85%8D%E7%BD%AEgitlab%E7%9A%84%E5%85%A5%E5%8F%A3

ok,接下来就是按照上面博客中提示的,修改gitlab的ssh端口

修改gitlab的SSH端口

只需修改这一段就可

代码语言:javascript
复制
vim /etc/gitlab/gitlab.rb
gitlab_rails['gitlab_shell_ssh_port'] = 24

然后再次重载和重启,最后就是非常关键的一步了,就是把ssh给代理出去,当然是通过nginx的方式,看到这,对于年幼的我,属实夸张了一把!!

nginx反代SSH

在我们的nginx服务器上,肯定也是跑着ssh服务,同样端口默认也是22,所以当我们通过外部nginx访问时,nginx会帮我们转发到gitlab所在服务器的ssh端口,配置如下:

代码语言:javascript
复制
# cat nginx.conf 

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}
# 增加此配置
stream {
upstream ssh {
        hash $remote_addr consistent;
        server  192.168.1.122:22 max_fails=3 fail_timeout=10s;  
    }    
    server {
        listen 24;
        proxy_connect_timeout 20s;
        proxy_timeout 5m;
        proxy_pass ssh;
    }
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                        '$status $body_bytes_sent "$http_referer" '
                        '"$http_user_agent" "$http_x_forwarded_for"';


    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

ssh是使用在tcp协议上的,而不是http,所以反向代理也要单独配置,使用Nginx的stream功能实现tcp代理。编辑stream模块,完事后,重启下nginx即可,然后再次git clone就可以解决了。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-11-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述
  • gitlab不使用内置nginx
  • 配置nginx反向代理
  • 修改gitlab的SSH端口
  • nginx反代SSH
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档