Назад | Перейти на главную страницу

SSH: можно ли перенаправить аутентификацию по паролю команде, выполняемой на удаленном компьютере?

Краткая справка о том, что именно я пытаюсь сделать:

Мне часто приходится настраивать аутентификацию с открытым ключом с удаленных клиентов на мою локальную машину. Я пытаюсь немного автоматизировать этот процесс, имея возможность запустить скрипт, который через SSH будет последовательно выполнять 2 действия:

1) Через SSH с аутентификацией по паролю используйте ssh-keygen на удаленном компьютере, сгенерируйте ключ RSA и сохраните его в заранее определенном месте.

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

Я попытался сделать №2 аналогично тому, как я сделал №1, с использованием ssh-copy-id в сеансе ssh. Однако я получаю только одно приглашение для ввода пароля, приглашение для первоначального SSH-соединения. На этом этапе ssh-copy-id требует аутентификации по паролю, однако SSH не отправляет обратно запрос пароля, и вместо этого я получаю следующий результат:

[localUser@localhost ~]$ ssh remoteUser@remoteIP ssh-copy-id -i ~/authenticationKey localuser@localhost
remoteUser@remoteIP's password: [ENTER]
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

Я также должен отметить здесь, что с помощью сообщений отладки я уже определил, что команда ssh успешно подключается. Сообщения об отказе в разрешении поступают от ssh-copy-id, а не ssh.

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

Я полагаю, что мог бы сделать это вручную в качестве обходного пути, используя scp, но я также частично заинтересован в том, чтобы узнать, есть ли способ сделать это, или, по крайней мере, что ssh здесь делает.

Спасибо за любую помощь, которую вы можете мне оказать!

-Блек Х.

Было бы проще использовать ssh-copy-id локально или просто используйте cat скопировать открытый ключ на локальный authorized_keys. Вот как я это сделал.

  1. Из местных, ssh для удаленного управления и используйте ssh-keygen, как на шаге №1
  2. Из местных, scp открытый ключ из удаленного в локальный файл tmp.pub
  3. На локальном компьютере cat tmp.pub >> /home/jimmy/.ssh/authorized_keys

Если вы добавите свой собственный открытый ключ к удаленному пользователю authorized_keys на шаге №1 вы можете выполнить шаг №2 без повторного ввода пароля.

Ваш ssh команда ssh-copy-id выполняется во вспомогательной оболочке на удаленном без терминала, поэтому вы видите, что вывод возвращается на ваш локальный компьютер, но ваш локальный ввод не попадает в удаленную суб-оболочку. На моей машине (Debian Wheezy) я сделал:

yba@tavas:~$ ssh localhost ssh localhost
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/yba/.ssh/id_rsa': 
Pseudo-terminal will not be allocated because stdin is not a terminal.
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Permission denied, please try again.
Permission denied, please try again.
Permission denied (publickey,password).
yba@tavas:~$ 

Обратите внимание на напечатанную причину: «Псевдотерминал не будет выделен, потому что stdin не является терминалом». Результат будет таким же, если вы дважды нажали клавишу ввода на пульте дистанционного управления без пароля.