Использование Putty для SSH с игнорированием всех предупреждений в Perl

Я пишу сценарий Perl для SSH на удаленные машины Linux и Maci из Windows. Для этого я запускаю plink (ссылка на шпатлевку) команда с использованием qx. Проблема в том, что когда я пытаюсь запустить команду plink, она выдает подсказку

Ключ хоста сервера не кэшируется в реестре. У вас нет гарантии, что сервер — это именно тот компьютер, которым вы его считаете. ...... Если вы не доверяете этому хосту, нажмите «Return», чтобы отказаться от соединения. Сохранить ключ в кеше? (г/н)

Мне нужно автоматизировать процесс удаленного запуска команды. Итак, я как-то хочу обойти это предупреждение.

Я мог бы придумать два способа сделать это, но не знаю, как это сделать

  • Как-то обойти это предупреждение от самой замазки через некоторые параметры командной строки или другие команды
  • Некоторый способ Perl для передачи ввода в plink при появлении запроса

Может ли кто-нибудь предложить, как это сделать одним из вышеуказанных способов или некоторыми другими решениями.


person him    schedule 01.07.2019    source источник
comment
Вы подключаетесь к произвольным хостам? Если нет, вы можете просто сказать «да» вручную один раз, и он будет сохранен.   -  person melpomene    schedule 01.07.2019
comment
Да, хосты — это машины в сети, и их произвольно, а не один или два.   -  person him    schedule 01.07.2019
comment
plink -batch просто терпит неудачу?   -  person melpomene    schedule 01.07.2019
comment
Там написано connection abandoned.   -  person him    schedule 01.07.2019
comment
Можете ли вы использовать решение без plink, например. Net::SSH2 или Net::SSH::Perl?   -  person melpomene    schedule 01.07.2019
comment
Проблема в том, что у меня нет этих модулей в моей системе, и я не могу их установить. Кроме того, когда я использую ssh (вместо plink), он также запрашивает пароль.   -  person him    schedule 01.07.2019
comment
Почему вы не можете их установить?   -  person melpomene    schedule 01.07.2019
comment
Я использую Perl из какой-то сетевой папки и у меня нет прав на установку там модулей   -  person him    schedule 01.07.2019
comment
Вау, это как слои WTF.   -  person melpomene    schedule 01.07.2019
comment
Я ожидаю, что Expect поможет с этим ... (на случай, если найденный вами хак когда-нибудь подведет вас)   -  person zdim    schedule 01.07.2019
comment
Вы уверены, что мы можем использовать Expect в Windows?   -  person him    schedule 01.07.2019
comment
См. также код VBA Excel, использующий echo y с PLink.   -  person Martin Prikryl    schedule 01.07.2019
comment
если мы можем использовать Expect в окне — хороший момент. В наши дни мы можем (хотя и с Cygwin)   -  person zdim    schedule 01.07.2019


Ответы (1)


Я решил это, используя каналы для передачи Y в plink при появлении запроса - echo Y | plink -ssh <user>@<host> -pw <password> <command>.

Дополнительные сведения см. в этом ответе. Также обратите внимание на ответ @clay, где он говорит

Для внутренних серверов слепое эхо y | ... трюк, вероятно, адекватен (и очень прост). Однако для внешних серверов, доступ к которым осуществляется через Интернет, гораздо безопаснее принять ключ хоста сервера один раз, а не принимать его каждый раз вслепую.

Так было и со мной - я использовал plink для подключения по ssh к внутренним серверам.

person him    schedule 01.07.2019
comment
Поэтому, пожалуйста, не публикуйте дубликаты ответов. Закройте свой вопрос как дубликат. - person Martin Prikryl; 01.07.2019
comment
Ну, это обходной путь, который я нашел для своей проблемы. Но, как я уже сказал, может быть более Perl(ish) способ сделать это, чего я не знаю. Использование Expect - один из таких способов, предложенных @zdim, но я думал, что он несовместим с окнами. - person him; 01.07.2019
comment
Что ж, тем более Perlish способ использовать нативную реализацию SSH на Perl, а не Plink. - person Martin Prikryl; 01.07.2019