phacility/phabricator · error · Exception

This repository ("%s") is not available over SSH.

Error message

This repository ("%s") is not available over SSH.

What it means

Before serving SSH, the workflow calls PhabricatorRepository::canServeProtocol(ssh, ...). That returns false when the repository is untracked/inactive for user requests, or when no clone URI observes the builtin SSH protocol with a suitable IO type (Read/Write for pushes; Read or Read/Write for pulls). The exception tells you the repo is not available over SSH.

Source

Thrown at src/applications/diffusion/ssh/DiffusionSSHWorkflow.php:243

    $base = $info['base'];

    $this->baseRequestPath = $base;

    $repository = id(new PhabricatorRepositoryQuery())
      ->setViewer($viewer)
      ->withIdentifiers(array($identifier))
      ->needURIs(true)
      ->executeOne();
    if (!$repository) {
      throw new Exception(
        pht('No repository "%s" exists!', $identifier));
    }

    $is_cluster = $this->getIsClusterRequest();

    $protocol = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH;
    if (!$repository->canServeProtocol($protocol, false, $is_cluster)) {
      throw new Exception(
        pht(
          'This repository ("%s") is not available over SSH.',
          $repository->getDisplayName()));
    }

    if ($repository->getVersionControlSystem() != $vcs) {
      $this->raiseWrongVCSException($repository);
    }

    return $repository;
  }

  protected function requireWriteAccess($protocol_command = null) {
    if ($this->hasWriteAccess === true) {
      return;
    }

    $repository = $this->getRepository();

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Go to Diffusion -> Manage Repository -> URIs and add or enable the builtin ssh:// URI with IO type Read & Write (Read is enough for clones)
  2. Activate the repository if it is currently untracked/inactive
  3. Use the HTTP(S) clone URI instead if SSH is intentionally disabled
Defensive patterns

Strategy: validation

Validate before calling

// Confirm SSH serving is enabled before cloning/pushing
$protocol = PhabricatorRepositoryURI::BUILTIN_PROTOCOL_SSH;
if (!$repository->canServeProtocol($protocol, $is_write)) {
  // guide the user to the HTTP(S) URI or to enabling the SSH URI
}

Prevention

When it happens

Trigger: Pushing to a repository whose SSH URI is set to No I/O or Read Only; cloning over SSH when the builtin ssh URI is disabled or deleted; any SSH access to a repository marked inactive.

Common situations: Admins disabling SSH URIs in favor of HTTPS; read-only mirrors; newly created repositories before URI defaults settle; repositories deactivated during maintenance.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/d39adab38bc9ab2a. Report an issue: GitHub.