Ssh git clone返回fatal: 'xxx/vscode.git' does not appear to be a git repository

#1

1.阿里云部署和archlinux终端访问结果

Gogs 版本:
2018 Gogs 当前版本: 0.11.88.0220

系统类型及版本:
阿里云服务器 CentOS
Linux 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
使用docker gogs/gogs部署

客户端:Virtual Box+ArchLinux
Linux Arch0 4.1.3-1-ARCH #1 SMP PREEMPT Wed Jul 22 20:52:17 CEST 2015 i686 GNU/Linux

数据库:sqlite3

问题描述:
使用http访问gogs一切正常,现在想切换到ssh模式,发现git clone返回:
fatal: ‘xxx/vscode.git’ does not appear to be a git repository

已按照官方文档要求,在virtual box+archlinux终端下配置好~/.ssh/config,id_rsa_gogs.pub, id_rsa_gogs,并且将id_rsa_gogs.pub里的内容添加到gogs用户的ssh密钥中。

2 https://try.gogs.io测试结果

登录用户,新建一个源码库,用id_rsa_gogs.pub配置用户ssh密钥,然后在virtual box+archlinux终端中运行git clone,结果如下:

3.使用virtual box+archlinux终端ssh访问github的git库,按照网上的教程配置好后,一切正常。

0 Likes

#2

你的操作没有直接被导到 docker 容器里吧? 看起来你在尝试通过添加 public key 到 docker 容器里,然后尝试授权宿主 linux 系统

0 Likes

#3

我对容器部署也不是特别懂,是按照网上教程弄了半天才将它配置好。以下是我的配置过程:

第一步,我们需要一台部署在互联网上具有公有独立IP的linux服务器。假设已经在大厂购买了云服务器,并且已经安装了centos linux操作系统,且厂家分配的主机IP为host_ip。

我们可以通过终端工具的ssh命令登录到云服务器,对它进行应用服务安装和配置。常见的ssh命令是这样的:

ssh root@xx.xx.xx.xx

xx.xx.xx.xx为厂家给您的云服务器ip地址。输入密码后,我们登录到该服务器的root用户。

在root用户下,我们先给linux系统建立users用户xxx,在终端中输入:

useradd -g users xxx

给用户设置密码,输入命令:

passwd xxx

编辑/etc/sudoers文件,将xxx变为sudo用户。打开该文件找到行:

root    ALL=(ALL)   ALL

然后后面加入下行:

xxx     ALL=(ALL)   ALL

然后保存该文件,这样用户xxx变为sudo用户,可以通过sudo命令获取root权限。

在本文中,后面使用容器应用程序gogs/gogs提供gogs服务,按照它的要求,必须在用户名git下运行。因此上面的xxx要取名为git。

第二步,在建好用户的linux主机上安装应用服务程序。部署gogs需要三样东西,即WWW服务器+数据库+gogs。为了降低参数配置复杂性,本文使用docker进行安装和配置。

为此我们需要首先在系统上安装docker和docker-compose。docker-compose可以利用单个配置文件以统一的风格对一批容器应用程序进行配置,实现对应用服务程序的组装,确保他们能够配合在一起共同完成工作任务。

在centos linux中运行以下命令即可安装docker和docker-compose:

sudo yum install docker
sudo yum install docker-compose

安装完docker后,我们还需要使用下面命令启动docker服务,并将其设置为开机启动:

sudo service docker start
sudo chkconfig docker on

在本文中采用gogs+caddy+sqlite3组建源码服务器。

在超级用户权限下使用以下命令可以用docker安装gogs和caddy:

docker pull gogs/gogs
docker pull abiosoft/caddy

第三步,我们用docker-compose对三种应用程序进行配置,将他们关联在一起,让他们协同运行完成任务。首先,我们用下面的Candyfile配置caddy:

host_ip:3000 {
    log /var/log/caddy.log
    gzip
}

将Candyfile放在~/candy/下,在后面的docker-compose.yml中,我们会将它映射到容器应用程序caddy。

用docker-compose.yml配置docker-compose:

version: '2'
services:
  caddy:
    container_name: caddy
    image: abiosoft/caddy
    volumes:
      - "~/caddy/Caddyfile:/etc/Caddyfile"
    restart: always
  ntk_gogs:
    container_name: ntk_gogs
    image: gogs/gogs
    volumes:
      - ~/gogs:/data
    ports:
      - "3000:3000"
      - "3022:22"
    restart: always

在上面的配置文件中,我们对容器应用程序caddy和gogs都进行了配置,如果不使用sqlite作为数据库的话,我们还可以在这个文件中对容器数据库应用程序进行配置。在上面的文件中,我们对由镜像(image)创建的容器应用程序进行了命名(container_name),指定了主机数据文件目录与容器应用程序的数据文件目录之间的映射关系(volumes),容器应用程序写入和读取的数据被映射到了主机上的指定位置,还指定了主机端口和容器应用程序端口之间的映射关系(ports),所有对特定端口的读写都被系统自动在主机和容器应用程序之间映射。

在上面的配置都弄好之后,在存放docker-compose.yml的当前目录下,使用命令开启所有的容器应用程序:

docker-compose up -d
0 Likes

#4

我非常奇怪的是,使用ssh密钥访问github是正常的。按照教程,一般是先生成公私钥对,然后做ssh-add,并将公钥添加到github的ssh密钥中就可以了。

但是,对于gogs,我今天试了一天,没有找到开启ssh访问的办法,而且log文件中没有记录

0 Likes

#5

你的 SSH 根本不是直连 Docker 容器的,所以你不可能连得上,只能使用 HTTP/HTTPS 进行访问。除非运行 Gogs 的 Docker 容器 expose 端口 22,但是这样你宿主的 SSHD 就凉凉了。如果你尝试 expose 宿主的其它端口到 Docker 容器的端口 22 的话,应该还是可以通过 SSH 访问的。

0 Likes

#6

非常感谢您的回答。我觉得gogs的log文件中最好有更详细的记录,方便排除错误。

后期我会按照您的建议尝试一下看能否解决问题。

0 Likes

#7

这是使用 docker 必须解决的问题,应用本身无能为力

0 Likes