使用内置ssh无法克隆仓库????

系统环境:mac 10.15.1
git 版本: 2.23.0
Gogs 版本: 0.11.91.0811

配置
[database]
DB_TYPE = sqlite3
HOST = 127.0.0.1:3306
NAME = gogs
USER = root
PASSWD =
SSL_MODE = disable
PATH = /Users/wameidemao/Desktop/gogs/data/gogs.db

[repository]
ROOT = /Users/wameidemao/Desktop/gogs/gogs-repositories

[server]
DOMAIN = localhost
HTTP_PORT = 3000
ROOT_URL = http://localhost:3000/
DISABLE_SSH = false
SSH_PORT = 22
START_SSH_SERVER = true
OFFLINE_MODE = false

克隆仓库会出现这个错误:
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

看到日志里只有一条这个信息:
2020/04/09 17:58:17 [ERROR] […/runtime/asm_amd64.s:1337 goexit()] env: exit status 1

这个要怎么排查问题?

在你的 mac 上执行以下命令分别输出什么:

$ cd /Users/wameidemao/Desktop/gogs
$ which env
$ env

这个错误提示是有点懵,不过我现在做改进也只能生效在 master 上,不知道你有没有这个条件用 master 版本?

➜ gogs git:(master) ✗ which env
/usr/bin/env

TERM_SESSION_ID=w0t0p3:2322BCFE-189D-4BE9-989A-3C62F73E57B0
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.ulrHifUdSn/Listeners
LC_TERMINAL_VERSION=3.3.2
COLORFGBG=7;0
ITERM_PROFILE=Default
XPC_FLAGS=0x0
LANG=zh_CN.UTF-8
PWD=/Users/wameidemao/Desktop/gogs
SHELL=/bin/zsh
SECURITYSESSIONID=186a6
TERM_PROGRAM_VERSION=3.3.2
TERM_PROGRAM=iTerm.app
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin:/Library/Apple/bin:/usr/local/go/bin:/Library/Frameworks/Mono.framework/Versions/Current/Commands:/Applications/Wireshark.app/Contents/MacOS
LC_TERMINAL=iTerm2
COLORTERM=truecolor
COMMAND_MODE=unix2003
TERM=xterm-256color
HOME=/Users/wameidemao
TMPDIR=/var/folders/_f/0n1bntlx5gjg4yz2zd0mhdf80000gn/T/
USER=wameidemao
XPC_SERVICE_NAME=0
LOGNAME=wameidemao
LaunchInstanceID=5A34EF2D-9001-4A14-8399-E0279DCB8E59
__CF_USER_TEXT_ENCODING=0x0:25:52
ITERM_SESSION_ID=w0t0p3:3322BCFE-189D-4BE9-989A-3C62F73E57BF
SHLVL=1
OLDPWD=/Users/wameidemao/Desktop
ZSH=/Users/wameidemao/.oh-my-zsh
PAGER=less
LESS=-R
LC_CTYPE=zh_CN.UTF-8
LSCOLORS=Gxfxcxdxbxegedabagacad
LE_WORKING_DIR=/Users/wameidemao/.acme.sh
_=/usr/bin/env

master 版本报错信息

2020/04/11 08:45:02 [ERROR] […ktop/gogsdev/internal/ssh/ssh.go:62 func1()] env: exit status 1

大概知道原因了,这个字符串貌似有问题!!!

就是这个字符串格式的问题,处理过就能正常clone代码了,,,

老哥牛逼,是因为多余的空白符号吗?

internal/ssh/ssh.go 的 60 行,args[0] 是个空字符串,然后组合成shell命令就成了
env =xxxxx
执行就返回错误了。

了解了,多谢!

我感觉是客户端的 bug 哈哈,正确的应该是发过去 LC_TERMINAL=iTerm2

应该不算客户端bug,看客户端发送过去的内容是正常的。

看了下 net/x/crypto/ssh 的处理方式,貌似 payload 是个结构体,直接 Unmarshal 就可以获取到值了。