Краткая справка о том, что именно я пытаюсь сделать:
Мне часто приходится настраивать аутентификацию с открытым ключом с удаленных клиентов на мою локальную машину. Я пытаюсь немного автоматизировать этот процесс, имея возможность запустить скрипт, который через 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
. Вот как я это сделал.
ssh
для удаленного управления и используйте ssh-keygen, как на шаге №1scp
открытый ключ из удаленного в локальный файл tmp.pub
Если вы добавите свой собственный открытый ключ к удаленному пользователю 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 не является терминалом». Результат будет таким же, если вы дважды нажали клавишу ввода на пульте дистанционного управления без пароля.