2011-03-09 15 views
12

Tengo el siguiente fabfile.py simple a partir de los documentos:Python Tela da: Error grave: No sesión existente

from fabric.api import run 

def host_type(): 
    run('uname -s') 

trato de ejecutarlo usando:

fab -H 192.168.0.201 host_type 

Pero sale el error :

[email protected]:~/me$ fab -H 192.168.0.201 host_type 
[192.168.0.201] run: uname -s 
Password for [email protected]: 

Fatal error: No existing session 

Aborting. 

No puedo entrar bien en 192.168.0.201.

¿Alguna idea?

+0

Algo raro sucede con su sesión ssh. ¿Qué sistema operativo está ejecutando el servidor? Pruebe 'ssh -o" PreferredAuthentications = password "' y vea si le niega el acceso. – JimB

+0

Esto acaba de comenzar a funcionar. No cambié nada de lo que podía recordar aparte de detener las máquinas virtuales y reiniciarlas, pero pensé que ya había hecho eso antes ... De todos modos, gracias a todos por las ideas. – verbatim

Respuesta

-1

Fue el fracaso agente de ssh para mí, causada por la eliminación de tarjeta inteligente. El problema se podía ver fácilmente en el resultado "usuario de ssh @ host" (en mi caso fue el mensaje "el agente admitió que no firmó con la clave").

Supongo que OP tuvo también un problema transitorio con ssh, de ahí el mismo error de paramiko (no muy claro).

-1

Recibí este mismo error inútil molesto también. Después de investigar y probar algunas cosas, finalmente lo solucioné en Ubuntu 10.04. Esto es lo que hice:

  1. Después de encontrar this, solía gconf-editor para ajustar/apps/gnome-keyring/Daemon-componentes/ssh a false para deshabilitar la interfaz del llavero Gnome a SSH.
  2. Eliminé mi directorio ~/.ssh.
  3. He reiniciado.
1

solucionarlo

  1. añadir estas líneas a su recept tela:

    from fabric.api import env 
    
    env.key_filename = "/path/to/.ssh/ssk_non_public_key" 
    

    Si ha colocado clave pública SSH en el servidor que tiene que ser accesos por el script fab.

  2. Si no, eliminarte.ssh esto también puede ayudar a

o se puede crear la clave ssh ssh-keygen y de utilizar la combinación de la 1) y 2)

1

De manera más general, si recibe este error, debe sshing tratar con los parámetros exactos que paramiko está tratando de usar:

  • nombre de host
  • usuario
  • método de autenticación

Descubrí que tener demasiadas claves SSH causaba algunas (pero no todas) de mis conexiones SSH de tela a fallar, porque todas las claves se ofrecían al host remoto. En el pasado, las claves mal formadas también han elevado este mensaje de error (puede detectarlas quitando las claves de ~/.ssh/, una a la vez).

Desafortunadamente, Fabric no respeta la configuración de .ssh/config. Si desea depurar esto, se puede ejecutar el siguiente:

#!/usr/bin/env python 
import paramiko 

paramiko.util.log_to_file("/tmp/paramiko.log") 
ssh = paramiko.SSHClient() 
# Run this if you get host key errors: see later 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect("example.com", username="myuser", password="mypassword") 

y comprobar la salida en /tmp/paramiko.log - se puede ver algo como:

INF [20120904-16:58:52.155] thr=1 paramiko.transport: Disconnect (code 2): Too many authentication failures for myuser 

Puede set no_keys on the Fabric env environment:

env.no_keys = True 

Pero luego tendrá que decirle a Fabric que use claves específicas para hosts específicos. Como se sugirió anteriormente, se puede hacer eso en su fabfile con:

from fabric.api import env 

env.key_filename = "/path/to/.ssh/ssk_non_public_key" 

más general here's a function to parse your .ssh config and pull out selective keys - en este claves, la clave SSH para su uso. Para que esto funcione de forma automática, tendrá que añadir a IdentityFile ~/.ssh/config:

Host example.com 
    IdentityFile /home/jp/.ssh/id_rsa_example 

Otra causa de la falla podría ser que paramiko does not recognize all host key types. Esto es algo más problemático: paramiko ignora silenciosamente la clave de host en ~/.ssh/known_hosts, porque no es un formato de clave de host que comprenda. Trate de ssh-ción con -v y ver lo que dice la línea SSH encuentra una coincidencia clave de host para:

debug1: Host '1.2.3.4' is known and matches the RSA host key. 
debug1: Found key in /home/jp/.ssh/known_hosts:105 

puedes intentar borrar esta línea, a continuación, haciendo ssh de nuevo y aceptar el (nuevo?) Clave de host, y ver si paramiko es feliz entonces. Si ese es el problema, sin embargo, y eso no lo resuelve, entonces no hay una solución clara que yo pueda ver.

+0

¿archivó un informe de error? – jberryman

20

Respuesta breve: pruebe los indicadores de línea de comandos '-k' y '-a' si tiene más de una clave pública SSH y desea usar la autenticación de contraseña.

Cuando encontré este error, fue el resultado de una situación única. Tengo muchas claves públicas diferentes en ~/.ssh. También tengo muchas de esas claves públicas agregadas a mi agente SSH. Intentaba usar Fabric con solo una contraseña.

Aquí es lo que vi en los registros del servidor de autenticación:

Nov 7 07:56:02 ubuntu sshd[1862]: Disconnecting: Too many authentication failures for user [preauth] 
Nov 7 07:56:08 ubuntu sshd[1864]: Disconnecting: Too many authentication failures for user [preauth] 

había instruido Tela utilizar claves públicas no para la autenticación con el indicador de línea de comandos '-k'. Me había perdido esa tela (a través de Paramiko) se predetermina a usar lo que está disponible a través del agente SSH. En mi caso, todas estas claves públicas se registraron con el agente SSH, por lo que decirle a Fabric que no use las claves públicas era una solución incompleta. Agregué el indicador de línea de comandos '-a' que le dice a Fabric que no consulte el agente SSH. Finalmente, podría usar la autenticación de contraseña para conectarme al servidor con Fabric.

+4

agregando '-a' funcionó para mí, gracias – gipi

+0

¿archivó un informe de error? – jberryman

0

Tenía una clave privada en ~/.ssh/config y resulta que necesito volver a agregarla con ssh-add ~/.ssh/PRIVATE_KEY_NAME y todo vuelve a funcionar. He usado el comando con la opción de agente de reenvío -A

0

No hay suficiente reputación para comentar en Troy J. Farrell's pregunta, en respuesta a jberryman's preguntas. Esto NO es un error, sino un artefacto en la forma en que se manejan las claves públicas de SSH.

Mi problema era que una de las claves que he cargado en ssh-agent (ed25519) era incompatible con uno de los sistemas que había cargado en env.hosts en el tejido. Como quería usar mis otras teclas, acabo de agregar la opción -a, y no la opción -k a fabric. Esto funcionó. La única advertencia es que si una de sus claves privadas está protegida con contraseña, deberá ingresar esta frase de contraseña cada vez que fabric use la clave.

Cuestiones relacionadas