Parallels-SSH с парольным ключом защищенного ключа SSH

8

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

Все документы, касающиеся parallel-ssh, показывают, что я должен быть в состоянии использовать --askpassили -Aсделать это:

-A
--askpass
      Prompt  for  a  password  and pass it to ssh.  The password may be 
      used for either to unlock a key or for password authentication.  The 
      password is transferred in a fairly secure manner (e.g., it will not 
      show up in argument lists).  However, be aware that a root user on 
      your system could potentially intercept the password.

Однако, когда я ввожу ключевую фразу своего ключа, он не работает:

$ parallel-ssh --hosts=machines --user=my_user --askpass \
    --timeout=0 --inline -v 'sudo apt-get update'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 09:59:36 [FAILURE] amritiii Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[2] 09:59:37 [FAILURE] gbdev Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[3] 09:59:37 [FAILURE] code Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[4] 09:59:37 [FAILURE] apollo Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[5] 09:59:37 [FAILURE] odin Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[6] 09:59:37 [FAILURE] hathor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[7] 09:59:37 [FAILURE] ldap Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[8] 09:59:37 [FAILURE] thor Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).
[9] 09:59:37 [FAILURE] bioserver Exited with error code 255
Stderr: Enter passphrase for key '/home/nhaigh/.ssh/id_rsa': 
Permission denied (publickey,password).

Я подтвердил, что мой ключ SSH и фраза-пароль работают на каждой из машин, поэтому я понятия не имею, как это работает.

Натан Уотсон-Хей
источник
Я предполагаю, что Parallels-SSH такой же, как PSSH?
СЛМ
Да parallel-sshи psshв самом деле одинаковы.
Натан С. Уотсон-Хей,

Ответы:

5

Если предположить , что parallel-sshи psshэквивалентны тогда да , что вы пытаетесь сделать , должен работать нормально с пылом ключевой фразы при использовании -Aпереключателя.

пример

Вот пример, где я подключаюсь к 2 различным системам, host1и host2. Я использую -lпереключатель, чтобы psshобеспечить пользователя по умолчанию root. Однако host2я переопределяю это в -Hкоммутаторе, указав имя хоста как user1@host2.

$ pssh -A -i -H "host1 user1@host2" -l root 'echo "hi"'
Warning: do not enter your password if anyone else has superuser
privileges or access to your account.
Password: 
[1] 21:38:00 [SUCCESS] user1@host2
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

X11 forwarding request failed on channel 1
Killed by signal 1.
[2] 21:38:00 [SUCCESS] host1
hi
Stderr: 
This is a private site.  Unauthorized connections are prohibited.  
All activity may be logged.  Disconnect immediately if you object to 
this policy or are not an authorized user.

ControlSocket /home/user1/.ssh/master-user1@ssh-tunnel.mydomain.com:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.

Когда вышесказанное сработает, вы заметите вывод команды, которую я запускаю echo "hi".

Ваша проблема

Проблема, с которой вы сталкиваетесь с парольной фразой в вашей паре ключей SSH, связана с ошибкой. Это ошибка под названием: Проблема 80: Не передать пароль? , 4-й комментарий к этой проблеме показывает патч:

выдержка

# 4 робин ... @ gmail.com

Я изменил строку на

  if not ( prompt.strip().lower().endswith('password:') or 
        'enter passphrase for key' in prompt.strip().lower()):

и похоже на работу

Ссылки

SLM
источник
Спасибо за ваш вклад СЛМ. parallel-sshи psshдействительно одинаковы. Я не спрашивал, возможно ли это - документация дает понять, что это возможно. У меня проблемы с тем, чтобы заставить его работать, как это задокументировано.
Натан С. Уотсон-Хей,
1
@ NathanS.Watson-Haigh - смотрите обновление. Это ошибка, я исправил патч.
SLM
Это действительно проблема, которая затрагивает меня. Тем не менее, поскольку авторы parallel-sshдо сих пор не уверены, как наилучшим образом определить вопрос с запросом пароля и, следовательно, ответить введенным паролем / фразой, я собираюсь придерживаться своего метода цепочки для ключей. Я бы не хотел, чтобы моя фраза была непреднамеренно раскрыта в ответ на неверный вопрос.
Натан С. Уотсон-Хей
1
Я приму это в качестве ответа, так как вам удалось выяснить, что это известная ошибка parallel-sshпри передаче ключевой фразы SSH. Однако, для тех, кто сталкивается с этим вопросом в будущем, эта ошибка, возможно, была исправлена, или вы можете не редактировать askpass_client.pyфайл. В любом случае вы можете обойти это, используя keychainответ ( unix.stackexchange.com/a/128998/57414 ) или ответ ssh-agent ( unix.stackexchange.com/a/129022/57414 )
Натан С. Уотсон- Haigh
5

Мне удалось заставить это работать, установив, keychainа не вручную исправляя ошибку, вызывающую мои проблемы.

Установить и вручную запустить связку ключей

# install keychain package
$ sudo apt-get install keychain

# add my key to the keychain, entering passphrase when asked
$ keychain ~/.ssh/id_rsa

# source the file generated by the above command
$ . ~/.keychain/$(uname -n)-sh

Выполнить команду без ввода пароля / парольной фразы

Теперь на этот раз мне не нужна моя парольная фраза при вызове, parallel-sshпоскольку цепочка для ключей заботится о проверке подлинности:

$ parallel-ssh --hosts=machines --user=my_user --timeout=0 'sudo apt-get update'
[1] 14:52:15 [SUCCESS] amritiii 
[2] 14:52:17 [SUCCESS] odin
[3] 14:52:25 [SUCCESS] gmod
[4] 14:53:11 [SUCCESS] bioserver
[5] 14:53:14 [SUCCESS] thor
[6] 14:53:14 [SUCCESS] apollo
[7] 14:53:16 [SUCCESS] gbdev
[8] 14:53:17 [SUCCESS] code
[9] 14:53:18 [SUCCESS] hathor
[10] 14:53:34 [SUCCESS] ldap

Запустить связку ключей при входе в систему

Вместо того, чтобы вручную запускать и добавлять свой ключ в цепочку для ключей, просто добавьте следующее в конец своего ~/.bash_profile:

$ keychain --clear $HOME/.ssh/id_rsa
$ . $HOME/.keychain/$(uname -n)-sh

Это гарантирует, что при первом входе в систему после перезагрузки вам будет предложено ввести пароль. Ваш ключ будет оставаться в связке ключей до следующей перезагрузки, или вы очистите связку ключей вручную.

Cron Jobs Использование цепочки для ключей

С учетом того, что в вашем ~/.bash_profileфайле указано выше , вы можете воспользоваться тем, что ваш ключ теперь хранится в цепочке для ключей, используя тот же файл перед запуском cronjob. Например, у меня есть скрипт резервного копирования, который запускается в 21:00 каждую ночь и копирует данные на удаленный компьютер через SSH. Это запись в моем crontab ( crontab -e):

 0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh
Натан Уотсон-Хей
источник
1

Используйте ssh-agent для автоматической аутентификации (с именем оболочки в качестве аргумента для установки переменных среды агента в этой новой оболочке). Добавьте ключ с помощью ssh-add и введите пароль только один раз.

$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity: 
$ 
$ pssh ...
Эммануэль
источник