ключ хоста plink не кэшируется в реестре при запуске из perl в IIS / Windows - PullRequest
2 голосов
/ 02 февраля 2011

Я пытаюсь запустить 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.

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

Ответы [ 3 ]

2 голосов
/ 02 февраля 2011

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

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

  1. Запустите команду как пользователь IIS из командной строки.Возможно, это сохранит хост для вызова с веб-сервера.
  2. Запустите команду из командной строки от имени себя.Найдите файл кэша вашего пользователя и скопируйте ключ из этого файла в файл кэша администратора.
  3. Если у вашей программы веб-сервера есть консольное окно на вашем компьютере, попробуйте получить доступ к этому сценарию из браузера, а затем введите «y» вэто окно консоли, когда сценарий достигает точки, где он запрашивает у вас этот ответ (это, вероятно, не сработает, поскольку программа уже может быть запущена в дочернем процессе, но, возможно, стоит попробовать)
0 голосов
/ 29 января 2016

Я порождаю 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
0 голосов
/ 01 ноября 2013

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

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

...