Acceso al repositorio denegado. el acceso a través de una clave de implementación es de solo lectura

302

Después de clonar con éxito mi repositorio de heroku y agregar otro control remoto

1/ git clone [email protected]:[APP].git
2/ git remote add bitbucket ssh://[email protected]/[ACCOUNT]/[REPO].git
3/ git push bitbucket master

Todavía recibo este error después de ejecutar la línea (3) o usar SourceTree

conq: repository access denied. access via a deployment key is read-only.

Primero, no entiendo lo que significa este mensaje en la práctica. Y eso es una pena.

Creé un par de claves ssh y agregué a heroku:

ssh-keygen -t rsa 
heroku keys:add ./id_rsa.pub 

También agregué mi clave en la sección de claves de implementación en BitBucket. Pero debo estar perdiendo algo. Esta pregunta no es por pereza, he estado leyendo varios documentos, incluidas las guías de BitBuckets. Pero todavía no se soluciona este problema.

Esta publicación está relacionada con ¿Puedo importar mi heroku git repo en bitbuket? ¿y cómo?

HECHOS ADICIONALES:

ssh -T [email protected]
conq: authenticated via a deploy key.

You can use git or hg to connect to Bitbucket. Shell access is disabled.


$ ssh -v [email protected]
OpenSSH_5.6p1, OpenSSL 0.9.8r 8 Feb 2011
debug1: Reading configuration data /Users/joel/.ssh/config
debug1: Applying options for bitbucket.org
debug1: Reading configuration data /etc/ssh_config
debug1: Applying options for *
debug1: Connecting to bitbucket.org [207.223.240.181] port 22.
debug1: Connection established.
debug1: identity file /Users/joel/.ssh/id_rsa type 1
debug1: identity file /Users/joel/.ssh/id_rsa-cert type -1
debug1: Remote protocol version 2.0, remote software version OpenSSH_5.3
debug1: match: OpenSSH_5.3 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_5.6
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-ctr hmac-md5 none
debug1: kex: client->server aes128-ctr hmac-md5 none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(1024<1024<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Host 'bitbucket.org' is known and matches the RSA host key.
debug1: Found key in /Users/joel/.ssh/known_hosts:5
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: Roaming not allowed by server
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Offering RSA public key: /Users/joel/.ssh/id_rsa
debug1: Remote: Forced command: conq deploykey:13907
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: read PEM private key done: type RSA
debug1: Remote: Forced command: conq deploykey:13907
debug1: Remote: Port forwarding disabled.
debug1: Remote: X11 forwarding disabled.
debug1: Remote: Agent forwarding disabled.
debug1: Remote: Pty allocation disabled.
debug1: Authentication succeeded (publickey).
Authenticated to bitbucket.org ([207.223.240.181]:22).
debug1: channel 0: new [client-session]
debug1: Requesting [email protected]
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_CTYPE = UTF-8
PTY allocation request failed on channel 0

Parece que todo está bien.

zabumba
fuente
1
Agregar una clave SSH en lugar de una clave de implementación funcionó para mí
Hari Das
Recuerde votar tanto las preguntas como las respuestas. ¡¡Salud!!
zabumba

Respuestas:

720

La primera confusión de mi lado fue sobre dónde exactamente configurar SSH Keys en BitBucket.

Soy nuevo en BitBucket y estaba configurando una clave de implementación que solo da acceso de lectura .

Así que asegúrese de que configura el rsa pub keyen su configuración de la cuenta Bitbucket .

Haga clic en su avatar de BitBucket y seleccione Configuración de Bitbucket (Administrar cuenta) Allí podrá configurar las claves SSH .

Simplemente eliminé la clave de implementación , no necesito ninguna por ahora. Y funcionó

ingrese la descripción de la imagen aquí

zabumba
fuente
48
Gracias por la respuesta. Esto es exactamente lo mismo que me faltaba. Agregué una clave de implementación en lugar de una clave SSH.
27
¡Si! Gracias por su respuesta. Atlassian realmente debería aclararlo en su documentación.
Ralph David Abernathy
14
¡Sí, ese menú de teclas ssh está bien oculto en Bitbucket!
jonprasetyo
3
¡Gran ayuda! Mercy Joelmaranhao!
kmria
66
Luchó con esto durante 30 minutos antes de encontrar su respuesta, muchas gracias
Micgeronimo
64

Ahora la opción SSH está bajo la configuración de seguridad

Haga clic en Su avatar -> Configuración de Bitbucket -> Clave SSH -> Agregar clave

Pega tu clave pública

Sathish
fuente
10
Gracias. Solo quiero describir mi caso. Agregué mi clave pública en la configuración del repositorio en lugar de en las claves de mi cuenta de Bitbucket. Así que eliminé la clave en el repositorio y la agregué a la configuración de mi perfil para que funcione.
lyubeto
13

Las claves de implementación son de solo lectura. Para habilitar el acceso de escritura necesita:

  • Elimine esta clave de implementación de la configuración de su repositorio. De todos modos, no podrá escribir en este repositorio con esta clave.

  • Vaya a "Avatar -> Configuración -> Claves SSH" y agregue la misma clave

  • Ahora intenta presionar para eliminar la rama

Antes podía escribir en repositorios, pero este es un cambio en BitBucket donde ya no puede escribir con la clave de implementación.

timhysniu
fuente
Gracias, esto funcionó para mí después de tirarme el pelo por mucho tiempo
Umar Adil
10

La 'Clave de implementación' es solo para acceso de solo lectura. Lo siguiente es una buena manera de resolver esto.

  • Crear una clave SSH y agregarla a bitbucket (Avatar de usuario -> Configuración de Bitbucket-> claves SSH)
  • ~ / .ssh / known_hosts
  • ssh-add -D (Eliminar claves cargadas al agente SSH)
  • ssh-add ~ / .ssh / your_private_key_for_bitbucket
  • ssh [email protected] -Tv (Verifique que su clave se esté utilizando para conectarse a bitbucket)
  • git push 'nombre remoto' 'nombre de sucursal'
Jerome Anthony
fuente
9

Primero debe eliminar la clave de implementación si va a agregar la misma clave en Administrar clave SSH de cuenta.

enviado.ror
fuente
3
Eliminar la clave de despliegue me daSomeone has already registered this as a deploy key.
dan-klasson
3
Sea claro que debe agregar la clave pública shh debajo de la CONFIGURACIÓN DE BITBUCKET (como en la cuenta BB completa) NO y repito NO bajo la Configuración de repositorio individual. Si agregó una clave en la configuración del repositorio, es por eso que obtiene estos errores.
Nate Uni
8

TLDR: ssh-add ~ / .ssh / yourkey

Acabo de resolver este problema.

Y ninguna de las otras respuestas ayudó.

Tenía un ./ssh/config con todas las cosas correctas, también un repositorio anterior que funcionaba bien (la misma cuenta de bitbucket, la misma clave). Luego generé un deploy_key, y luego creé un nuevo repositorio.

Después de eso no se pudo clonar el nuevo repositorio.

Desearía saber cómo / por qué el agente ssh estaba estropeando esto, pero agregar la clave lo resolvió. Me refiero a agregar la clave en mi Ubuntu local, no en el administrador de bitbucket. El comando es solo

    ~/.ssh$ ssh-add myregualrkey

Espero que esto ayude a alguien.

Tjunkie
fuente
Excelente. Esto era exactamente lo que estaba buscando.
jpaljasma
3
No entiendo lo que hiciste.
kev
5

Esto sucedió cuando estaba tratando de usar una clave de implementación porque eso es exactamente lo que quería.

Podría conectarme ssh -T [email protected]y me diría que tenía acceso para leer el repositorio que quería, pero git cloneque fallaría.

Despejando ~/.ssh/known_hosts, generando una nueva clave vía ssh-keygen, agregando esa nueva clave al bitbucket, y volviendo a intentarlo, la arreglé para mí.

sarink
fuente
4

Me gustaría volver a enfatizar lo siguiente:

  • Es posible que haya agregado la clave SSH a su repositorio (por ejemplo, ExampleRepo), pero NO es aquí donde va la clave SSH .
  • Está destinado a entrar en SU PERFIL . Este es el pequeño avatar en la esquina inferior izquierda de la pantalla. Aquí encontrarás una diferente lugar para colocar sus claves SSH (en Seguridad)> luego agregará la clave aquí.
  • Si accidentalmente coloca su clave SSH en el repositorio (a diferencia de su cuenta), elimine la que está en el repositorio.

Me llevó años darme cuenta, de alguna manera, incluso después de leer las respuestas aquí, no hizo clic.

David Liu
fuente
3

Primero elija o cree la clave que desea usar para empujar a Bitbucket. Digamos que su clave pública está en~/.ssh/bitbucket.pub

  • Agregue su clave pública a Bitbucket iniciando sesión y yendo a su perfil público, configuración, ssh-key, add key.
  • Configure ssh para usar esa clave cuando se comunique con Bitbucket. Por ejemplo, en Linux agregue a ~/.ssh/config:
    Host bitbucket.org
    IdentityFile ~/.ssh/bitbucket
Ivan Ogai
fuente
2

Recientemente me enfrenté al mismo problema. Tuve el siguiente error:

acceso al repositorio denegado. El acceso a través de una clave de implementación es de solo lectura.

Puede tener dos tipos de claves SSH:

  1. Para toda su cuenta que funcionará para todos los repositorios
  2. Por clave SSH de repositorio que solo se puede usar para ese repositorio específico.

Simplemente eliminé mi clave SSH del repositorio y agregué una nueva clave SSH a mi cuenta y funcionó bien.

Espero que esto ayude a alguien. Salud

Yoones Mehdian
fuente
1

Tuve el mismo problema que Kabir Sarin. La solución fue clonar el repositorio a través de SSH, en lugar de usar la URL https. así que esto es lo que me ayudó, y espero que otros:

    git clone [email protected]:{accountName}/{repoName}.git
Lippai Zoltan
fuente
1

Pasos:

  1. Crear claves ssh en el servidor de origen

    ssh-keygen

  2. Cat y copie id_rsa.pub ubicado en el directorio ~. / Ssh

  3. Vaya a Bitbucket, si ya ha configurado las claves de acceso para los repositorios, elimine las claves públicas existentes
  4. Vaya a Avatar de Bitbucket> Configuración de Bitbucket> Claves SSH (en Seguridad, panel izquierdo)> Haga clic en 'Agregar claves'> pegue la clave pública.
  5. Compruebe si funciona ejecutando el siguiente comando en el servidor de origen

    git remote show origin

  6. Para buscar y enviar desde el servidor de origen, si el protocolo es 'https', debe cambiarlo a 'git + ssh' ejecutando el siguiente comando

    git remote set-url origin git+ssh://<bitbucketaccount>@bitbucket.org/<accountname>/repo.git

  7. Compruebe si puede empujar al repositorio.

¡Hecho!

rahul darga
fuente
¿Cuál es el punto cuando la respuesta correcta ya se ha dado 3 o 4 veces? ¿Por qué no tratar de responder una pregunta que todavía no tiene respuesta?
zabumba
1
Gracias por el amable consejo.
rahul darga
0

Todo lo que necesita: agregue otra clave y úsela.

Como he encontrado la primera clave, siempre la clave de implementación.

Victor Perov
fuente
0

A veces no funciona porque configura manualmente otra clave para bitbucket ~/.ssh/config.

sean
fuente
0

Proceso de dos pasos para poder empujar pull
Paso 1: generar la clave ssh (pública y privada) en mac

Paso 2: colocar la clave privada en mac y la clave pública en el sitio web de git a

continuación, los pasos detallados son para usuarios de mac

Paso 1: generar claves

  1. (asegúrese de tener instalado git) https://git-scm.com/download/mac
  2. abra la terminal y escriba ssh-keygenesto le pedirá que ingrese la ubicación de almacenamiento para la clave, puede escribir/Users/[machinename]/.ssh/[keyname]
  3. A continuación, solicitará una frase de contraseña, puede dejarla en blanco presionando enter o ingresar alguna palabra clave para ingresar nuevamente en el siguiente mensaje
  4. Esto habrá creado dos claves para usted, privadas y públicas, con el nombre [keyname] y [keyname] .pub

Paso 2: presionar las teclas en las ubicaciones apropiadas [mac y cuentas remotas, es decir, Github, bitbucket, gitlab, etc.]

  1. Tipo ssh-add -K ~/.ssh/[keyname] terminal para agregar su clave privada a la mac
  2. Escriba pbcopy < ~/.ssh/[keyname].pubpara copiar la clave pública al portapapeles
  3. Abra la configuración de la cuenta en su sitio web de git respectivo y vaya a agregar clave, allí pegue la clave pública copiada arriba

Listo, ahora puedes empujar y jalar.

Akshay Vijay Jain
fuente
Para aquellos que votaron negativamente, estuve luchando todo el día y no pude encontrar ninguna respuesta que resolviera directamente mi problema, y ​​los pasos mencionados aquí los resuelven directamente y son genéricos. De todos modos
Akshay Vijay Jain
-1

Aquí está el código completo para clonar todos los repositorios de un determinado equipo / usuario de BitBucket

# -*- coding: utf-8 -*-
"""

    ~~~~~~~~~~~~

    Little script to clone all repos from a given BitBucket team/user.

    :author: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html
    :copyright: (c) 2019
"""

from git import Repo
from requests.auth import HTTPBasicAuth

import argparse
import json
import os
import requests
import sys

def get_repos(username, password, team):
    bitbucket_api_root = 'https://api.bitbucket.org/1.0/users/'
    raw_request = requests.get(bitbucket_api_root + team, auth=HTTPBasicAuth(username, password))
    dict_request = json.loads(raw_request.content.decode('utf-8'))
    repos = dict_request['repositories']

    return repos

def clone_all(repos):
    i = 1
    success_clone = 0
    for repo in repos:
        name = repo['name']
        clone_path = os.path.abspath(os.path.join(full_path, name))

        if os.path.exists(clone_path):
            print('Skipping repo {} of {} because path {} exists'.format(i, len(repos), clone_path))
        else:
            # Folder name should be the repo's name
            print('Cloning repo {} of {}. Repo name: {}'.format(i, len(repos), name))
            try:
                git_repo_loc = '[email protected]:{}/{}.git'.format(team, name)
                Repo.clone_from(git_repo_loc, clone_path)
                print('Cloning complete for repo {}'.format(name))
                success_clone = success_clone + 1
            except Exception as e:
                print('Unable to clone repo {}. Reason: {} (exit code {})'.format(name, e.stderr, e.status))
        i = i + 1

    print('Successfully cloned {} out of {} repos'.format(success_clone, len(repos)))

parser = argparse.ArgumentParser(description='clooney - clone all repos from a given BitBucket team/user')

parser.add_argument('-f',
                    '--full-path',
                    dest='full_path',
                    required=False,
                    help='Full path of directory which will hold the cloned repos')

parser.add_argument('-u',
                    '--username',
                    dest="username",
                    required=True,
                    help='Bitbucket username')

parser.add_argument('-p',
                    '--password',
                    dest="password",
                    required=False,
                    help='Bitbucket password')

parser.add_argument('-t',
                    '--team',
                    dest="team",
                    required=False,
                    help='The target team/user')

parser.set_defaults(full_path='')
parser.set_defaults(password='')
parser.set_defaults(team='')

args = parser.parse_args()

username = args.username
password = args.password
full_path = args.full_path
team = args.team

if not team:
    team = username

if __name__ == '__main__':
    try:
        print('Fetching repos...')
        repos = get_repos(username, password, team)
        print('Done: {} repos fetched'.format(len(repos)))
    except Exception as e:
        print('FATAL: Could not get repos: ({}). Terminating script.'.format(e))
        sys.exit(1)

    clone_all(repos)

Más información: https://thepythoncoding.blogspot.com/2019/06/python-script-to-clone-all-repositories.html

Kais Tounsi
fuente
-3

para este error: conq: acceso al repositorio denegado. El acceso a través de una clave de implementación es de solo lectura.

Cambio el nombre de mi llave, ejemplo

cd /home/try/.ssh/
mv try id_rsa
mv try.pub id_rsa.pub

Trabajo en mi propia clave en bitbucket

Elron
fuente