Подтвердить что ты не робот

Python Fabric дает: Неустранимая ошибка: нет существующего сеанса

У меня есть следующий простой файл fabfile.py из документации:

from fabric.api import run

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

Я пытаюсь запустить его, используя:

fab -H 192.168.0.201 host_type

Но получите ошибку:

[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.

Я могу сделать ssh в 192.168.0.201.

Любые идеи?

4b9b3361

Ответ 1

Короткий ответ: попробуйте флаги командной строки "-k" и "-a", если у вас есть более одного открытого ключа SSH и вы хотите использовать аутентификацию по паролю.

Когда я столкнулся с этой ошибкой, это стало результатом очень уникальной ситуации. У меня много разных открытых ключей в ~/.ssh. У меня также есть много этих открытых ключей, добавленных к моему агенту SSH. Я пытался использовать Fabric только с паролем.

Вот что я видел в журналах проверки подлинности сервера:

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]

Я попросил Fabric использовать не открытые ключи для аутентификации с флагом командной строки '-k'. Я пропустил этот Fabric (через Paramiko) по умолчанию, используя все, что доступно через агента SSH. В моем случае все эти открытые ключи были зарегистрированы агентом SSH, поэтому говорить, что Fabric не использовать открытые ключи, было неполным решением. Я добавил флаг командной строки '-a', который сообщает Fabric, что он не запрашивает агента SSH. Наконец, я могу использовать аутентификацию паролем для подключения к серверу с помощью Fabric.

Ответ 2

В более общем плане, если вы получите эту ошибку, вы должны попробовать SSHing с точными параметрами, которые пытается использовать paramiko:

  • имя хоста
  • Пользователь
  • метод проверки подлинности

Я обнаружил, что наличие слишком большого количества SSH-ключей привело к сбою некоторых (но не всех) моих SSH-подключений, поскольку все ключи были предложены удаленному хосту. Раньше неправильные ключи также поднимали это сообщение об ошибке для меня (вы можете обнаружить их, удалив ключи из ~/.ssh/, по одному за раз.)

К сожалению, Fabric не поддерживает ваши настройки .ssh/config. Если вы хотите отладить это, вы можете запустить следующее:

#!/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")

и проверьте вывод в /tmp/paramiko.log - вы можете увидеть что-то вроде:

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

Вы можете установить no_keys в среду окружения Fabric:

env.no_keys = True

Но тогда вам нужно будет сказать Fabric, чтобы использовать определенные ключи для определенных хостов. Как было предложено выше, вы можете сделать это в своем файле с помощью:

from fabric.api import env

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

В более общем плане здесь используется функция для синтаксического анализа вашей конфигурации .ssh и выделения выборочных ключей - в этих ключах используется SSH-ключ. Чтобы это работало автоматически, вам нужно добавить IdentityFile в ~/.ssh/config:

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

Другой причиной отказа может быть то, что paramiko не распознает все типы ключей хоста. Это несколько более проблематично: paramiko спокойно игнорирует ключ хоста в ~/.ssh/known_hosts, потому что это не формат ключа хоста, который он понимает. Попробуйте ssh-ing с -v и посмотрите, какая строка SSH говорит, что он находит совпадение с ключом для:

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

Вы можете попробовать удалить эту строку, затем снова выполнить ssh и принять (новый?) ключ хоста и посмотреть, понравится ли paramiko. Если эта проблема, тем не менее, и которая ее не решает, то нет ясного решения, которое я могу видеть.

Ответ 3

Чтобы исправить его

  • добавьте эти строки в ваш прием ткани:

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

    Если вы разместили общедоступный ключ ssh на сервере, к которому необходимо получить доступ с помощью fab script.

  • Если нет - удалите каталог .ssh, это также поможет

Или вы можете создать ssh-ключ ssh-keygen и использовать комбинацию 1) и 2)

Ответ 4

У меня был секретный ключ в ~/.ssh/config и, оказывается, мне нужно добавить его снова с помощью ssh-add ~/.ssh/PRIVATE_KEY_NAME, после чего все снова начнет работать. Я использую команду с опцией прямого агента -A

Ответ 5

Недостаточно репутации, чтобы прокомментировать сообщение Трои Дж. Фаррелла в ответ на вопросы jberryman's. Это НЕ ошибка, но артефакт в том, как обрабатываются открытые ключи SSH.

Моя проблема была одним из ключей, которые я загрузил в ssh-agent (ed25519), был несовместим с одной из систем, которые я загрузил в env.hosts в ткани. Поскольку я действительно хотел использовать другие ключи, я просто добавил параметр -a, а не -k-вариант для создания. Это сработало. Единственное предостережение в том, что если один из ваших секретных ключей защищен паролем, вам придется вводить эту кодовую фразу каждый раз, когда ткань использует ключ.

Ответ 6

Одно из самых простых решений в fab --help - использование параметра -a.

имя файла: fabfile.py Для запуска из командной строки: fab -a check_service

from fabric.api import run, env

env.hosts = ['127.0.0.1']
env.user = 'viraj'

def check_service():
    """
    Function will show status of nginx service. 
    """
    run ("systemctl status nginx.service")

Ответ 8

Это был сбой агента ssh для меня, вызванный удалением смарт-карт. Проблема может быть легко видна на выходе "ssh user @host" (в моем случае это было сообщение "Агент признано не подписано с использованием ключа" ).

Моя догадка заключается в том, что у OP была некоторая временная проблема с ssh, следовательно, та же самая (не особенно явная) ошибка paramiko.

Ответ 9

Я тоже получил такую ​​же неприятную и бесполезную ошибку. Изучив и пробовав несколько вещей, я, наконец, исправил его на Ubuntu 10.04. Это то, что я сделал:

  • После нахождения this, я использовал gconf-editor для установки /apps/gnome -keyring/daemon-components/ssh в false, чтобы отключить Интерфейс Gnome Keyring для SSH.
  • Я удалил свой каталог ~/.ssh.
  • Я перезагрузился.