ключ хоста plink не кэшируется в реестре при запуске из perl в IIS/Windows

Я пытаюсь запустить perl-скрипт на другом сервере с веб-страницы, и у меня проблемы с plink: похоже, он не запоминает ключ хоста при запуске от пользователя IUSR_.

Мне удалось уменьшить проблему:

print "Content-Type:text/plain\n\n";
open(PLINK, "| \"C:\\Program Files\\PuTTY\\plink.exe\" -pw sanitized Administrator\@serveurftp.a.b.c whoami") or die "Can't fork: $!";
sleep(1);
print PLINK "y\n";
close(PLINK);

При вызове этого скрипта с веб-страницы я всегда получаю следующее:

The server's host key is not cached in the registry. You
have no guarantee that the server is the computer you
think it is.
The server's rsa2 key fingerprint is:
ssh-rsa 2048 cb:eb:dc:1b:9e:1c:6b:fa:63:fb:2e:ba:2c:61:26:c4
If you trust this host, enter "y" to add the key to
PuTTY's cache and carry on connecting.
If you want to carry on connecting just once, without
adding the key to the cache, enter "n".
If you do not trust this host, press Return to abandon the
connection.
Store key in cache? (y/n) serveurftp\administrator

Я должен получить это только в первый раз, а потом только "serveurftp\administrator", но похоже, что plink не может сохранить ключ хоста, когда он запускается из IIS.

Ребята, у вас есть идеи, как обойти это?


person Guillaume Filion    schedule 02.02.2011    source источник


Ответы (3)


В таком случае приложение часто будет пытаться прочитать ответ "y/n" из консоли (или, говоря языком Unix, tty), а не обязательно из стандартного ввода, поэтому программа, вероятно, не регистрирует ответ "y", который вы труба к нему.

Некоторые обходные пути могут быть:

  1. Запустите команду от имени пользователя IIS из командной строки. Возможно, это сохранит хост для вызова с веб-сервера.
  2. Запустите команду из командной строки от своего имени. Найдите файл кеша вашего пользователя и скопируйте ключ из этого файла в файл кеша администратора.
  3. Если ваша программа веб-сервера имеет окно консоли на вашем компьютере, попробуйте получить доступ к этому сценарию из браузера, а затем введите «y» в этом окне консоли, когда сценарий дойдет до точки, где он запрашивает у вас этот ответ (это, вероятно, не будет работать потому что программа может быть уже запущена в дочернем процессе, но, возможно, стоит попробовать)
person mob    schedule 02.02.2011
comment
Вы знаете, как я мог бы сделать # 1? В Unix я бы сделал sudo -u user plink... но я не знаю, как сделать то же самое в Windows... - person Guillaume Filion; 02.02.2011
comment
Перейдите в Пуск ›› Все программы ›› Стандартные и щелкните правой кнопкой мыши Командную строку. Выберите «Запуск от имени администратора» или «Запуск от имени…». - person mob; 02.02.2011

Решение предоставлено здесь (спасибо Дину Гранту):

Принимать ключ хоста сервера при автоматизации сеанса SSH с помощью PuTTY Plink

person user2945935    schedule 01.11.2013
comment
Добро пожаловать в Stack Overflow. Теоретически эта ссылка может дать ответ на вопрос, но предпочтительнее включить сюда основные части ответа и предоставить ссылку для ссылка. - person Rob Bajorek; 01.11.2013

Я создаю plink.exe внутри сценария tcl (вместе с командами Expect), поэтому я не смог использовать pipe | потому что tcl его не распознает. Я добился того же, создав plink, нажав «y», выйдя, а затем снова создав plink.

#Push a "y" to overcome ssh host key challenge
spawn plink -ssh 192.168.1.1 -l username -pw password
send -s "y\r"
send -s "exit\r"

#ssh into host
spawn plink -ssh 192.168.1.1 -l username -pw password
person scrith    schedule 29.01.2016