Index: src/github.com/go-gitea/gitea/models/repo.go --- src/github.com/go-gitea/gitea/models/repo.go.orig 2018-05-01 12:52:43.041450000 +0200 +++ src/github.com/go-gitea/gitea/models/repo.go 2018-05-01 13:56:41.640295000 +0200 @@ -867,11 +867,23 @@ repo.Owner = repo.MustOwner() cl := new(CloneLink) if setting.SSH.Port != 22 { - cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", sshUser, setting.SSH.Domain, setting.SSH.Port, repo.Owner.Name, repoName) + if setting.SSH.StartBuiltinServer { + cl.SSH = fmt.Sprintf("ssh://%s:%d/%s/%s.git", setting.SSH.Domain, setting.SSH.Port, repo.Owner.Name, repoName) + } else { + cl.SSH = fmt.Sprintf("ssh://%s@%s:%d/%s/%s.git", sshUser, setting.SSH.Domain, setting.SSH.Port, repo.Owner.Name, repoName) + } } else if setting.Repository.UseCompatSSHURI { - cl.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", sshUser, setting.SSH.Domain, repo.Owner.Name, repoName) + if setting.SSH.StartBuiltinServer { + cl.SSH = fmt.Sprintf("ssh://%s/%s/%s.git", setting.SSH.Domain, repo.Owner.Name, repoName) + } else { + cl.SSH = fmt.Sprintf("ssh://%s@%s/%s/%s.git", sshUser, setting.SSH.Domain, repo.Owner.Name, repoName) + } } else { - cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", sshUser, setting.SSH.Domain, repo.Owner.Name, repoName) + if setting.SSH.StartBuiltinServer { + cl.SSH = fmt.Sprintf("%s:%s/%s.git", setting.SSH.Domain, repo.Owner.Name, repoName) + } else { + cl.SSH = fmt.Sprintf("%s@%s:%s/%s.git", sshUser, setting.SSH.Domain, repo.Owner.Name, repoName) + } } cl.HTTPS = ComposeHTTPSCloneURL(repo.Owner.Name, repoName) return cl Index: src/github.com/go-gitea/gitea/models/ssh_key.go --- src/github.com/go-gitea/gitea/models/ssh_key.go.orig 2018-05-01 12:50:35.000000000 +0200 +++ src/github.com/go-gitea/gitea/models/ssh_key.go 2018-05-01 12:52:43.041853000 +0200 @@ -30,7 +30,7 @@ const ( tplCommentPrefix = `# gitea public key` - tplPublicKey = tplCommentPrefix + "\n" + `command="%s serv key-%d --config='%s'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %s` + "\n" + tplPublicKey = tplCommentPrefix + "\n" + `command="%s key-%d --config='%s'",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty %s` + "\n" ) var sshOpLocker sync.Mutex @@ -74,7 +74,7 @@ // AuthorizedString returns formatted public key string for authorized_keys file. func (key *PublicKey) AuthorizedString() string { - return fmt.Sprintf(tplPublicKey, setting.AppPath, key.ID, setting.CustomConf, key.Content) + return fmt.Sprintf(tplPublicKey, "@l_prefix@/sbin/gitea-serv", key.ID, setting.CustomConf, key.Content) } func extractTypeFromBase64Key(key string) (string, error) {