Я хотел бы использовать свой защищенный парольной фразой ключ 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 и парольная фраза работают на каждой из машин, поэтому я понятия не имею, как заставить это работать.
решение1
Если предположить, что 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/[email protected]:22 already exists, disabling multiplexing
X11 forwarding request failed on channel 0
Killed by signal 1.
Если все вышеперечисленное сработает, вы увидите вывод команды, которую я запускаю: echo "hi"
.
Ваша проблема
Проблема, с которой вы столкнулись с парольной фразой в вашей паре ключей SSH, вызвана ошибкой. Вот ошибка под названием:Проблема 80: Не проходит парольная фраза?. В 4-м комментарии к этой проблеме показан патч:
выдержка
#4[email protected]
Я изменил строку на
if not ( prompt.strip().lower().endswith('password:') or 'enter passphrase for key' in prompt.strip().lower()):
и это, кажется, работает
Рекомендации
решение2
Мне удалось заставить это работать, установив, 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 с использованием связки ключей
После того, как вышеперечисленное будет введено в ваш ~/.bash_profile
файл, вы можете воспользоваться тем фактом, что ваш ключ теперь хранится в связке ключей, скопировав тот же файл перед запуском cronjob. Например, у меня есть скрипт резервного копирования, который запускается в 21:00 каждую ночь и копирует данные на удаленный компьютер через SSH. Это запись в моем crontab ( crontab -e
):
0 21 * * * . $HOME/.keychain/$(uname -n)-sh; $HOME/backup_script.sh
решение3
Использоватьssh-агентдля автоматической аутентификации (с именем оболочки в качестве аргумента для установки переменных среды агента в этой новой оболочке). Добавьте ключ сssh-добавитьи введите свой пароль только один раз.
$ ssh-agent bash
$ ssh-add
Enter passphrase for /xxxx/.ssh/identity:
$
$ pssh ...