Рейтинг:-1

Почему сценарий PSFTP не работает при запуске в качестве системы?

флаг cn

У меня есть командный файл Windows cmd, который должен получить список файлов, находящихся на FTP-сервере, через sFTP с использованием PuTTY PSFTP exe и использовать его для дальнейшей обработки. Командная команда:

эхо лс | psftp -l myusername -pw mycomplexpwd FTPServerHostname > C:/Users/myuser/Desktop/ls.txt

Предполагается вывести листинг в ls.txt файл, который я использую в других сценариях. Когда я работаю как обычный пользователь, я получаю список в порядке. Однако при использовании планировщика заданий и планировании сценария как СИСТЕМА пользователь, я получаю только это в выходном файле:

Удаленный рабочий каталог /
psftp> выйти

Я догадался, что проблема в трубе | использование или что-то в этом роде, поэтому я также пытался использовать этот синтаксис, но также и тот же вывод:

psftp -l myusername -pw mycomplexpwd FTPServerHostname < C:/Users/myuser/Desktop/lscmd.txt > C:/Users/myuser/Desktop/ls.txt

Что может быть причиной проблемы при планировании задания как СИСТЕМА вместо моего пользователя? А как получить листинг как СИСТЕМНЫЙ? Обратите внимание, что при запуске сценария от имени администратора (щелчок правой кнопкой мыши — «Запуск от имени администратора») я получаю список в порядке, проблема возникает только при использовании планировщика задач и планировании задачи как СИСТЕМА.

ОС — Windows Server 2012 R2.

флаг cn
Я голосую за закрытие этого вопроса, потому что он отправлен на SO: https://stackoverflow.com/questions/70041315/how-to-script-sftp-commands-with-psftp
Рейтинг:0
флаг cn

Итак, немного покопавшись, оказывается, что PSFTP не распознает ключи к ftp-серверу. Я открыл cmd как СИСТЕМА (что может быть немного сложно!) и подключился через PSFTP, принял доверие к хосту (серверу sFTP), после чего скрипт заработал как положено! У других пользователей это не вызвало проблем, так как они использовались в тестировании и подсказка была раньше!

К вашему сведению, ключ также хранится в реестре в разделе HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys, чтобы его можно было добавить туда для других пользователей, если вы не хотите входить в систему вручную (я добавил эту отметку в свой скрипт, чтобы добавить ее, если она отсутствует для любого пользователя, выполняющего скрипт).

РЕДАКТИРОВАТЬ: я считаю, что моей самой большой проблемой было получение cmd как СИСТЕМА поэтому я могу отлаживать происходящее, как только я смог (см. ссылку выше, как я это сделал), мне стало ясно.Для справки и большей ясности ниже приведен вывод команды перед добавлением ключа, только замаскированные чувствительные части:

C:\Users\myuser>эхо ls | psftp -l myftpuser -pw mycomplexpswd sftp_server
Ключ хоста сервера не кэшируется. У вас нет гарантии
что сервер - это компьютер, которым вы его считаете.
Отпечаток ключа rsa2 сервера:
ssh-rsa 2048 SHA256: сложный причудливый ключ хоста
Если вы доверяете этому хосту, введите «y», чтобы добавить ключ к
Кэш PuTTY и продолжайте подключение.
Если вы хотите продолжить подключение только один раз, без
добавив ключ в кеш, введите "n".
Если вы не доверяете этому хосту, нажмите «Ввод», чтобы отказаться от
связь.
Сохранить ключ в кеше? (да/нет, Возврат отменяет соединение, я для получения дополнительной информации) 
Используя имя пользователя «myftpuser».
Баннерное сообщение перед аутентификацией с сервера:
| Вход в систему через FTP компании. Чтобы продолжить, введите действительные учетные данные.
Конец баннерного сообщения с сервера
Запросы аутентификации с интерактивной клавиатуры с сервера:
Конец интерактивных подсказок с сервера
Удаленный рабочий каталог /
psftp> выйти
флаг so
Но вы не можете получить *"Удаленный рабочий каталог /"*, если это было проблемой. Значит, вы не дали нам правильную информацию.
amyassin avatar
флаг cn
@MartinPrikryl Я понимаю, почему вы так думаете, но это то, что я получил. Я попробовал это на другом сервере и получил те же результаты! Я тоже не ожидала..Ошибка не передавалась в файл только эти строки..
флаг so
Вы не получите *"Ключ хоста сервера не кэширован"* в `ls.txt`, так как вы перенаправляете только stdout, а не stderr. Это ожидаемо. Но вы также не можете получить *"Удаленный рабочий каталог /"*, так как вы можете получить это только после того, как вы действительно подключитесь, чего вы не сделали.
amyassin avatar
флаг cn
@MartinPrikryl Да, я понимаю и полностью с вами согласен, но вот что произошло. Что-то, что могло пойти не так, как вы думаете? Я не дал неверную информацию, только то, что я получил ..
флаг so
Я не понимаю вашего комментария. + Кстати, лучшим решением для принятия ключа хоста является использование переключателя `-hostkey`.
amyassin avatar
флаг cn
@MartinPrikryl Я удалил ключ из реестра и снова повторил попытку из cmd, а также отредактировал свой ответ, чтобы вы могли видеть результат, который я получил. Я полагаю, что большая часть этого находится в stderr, но в нем есть вывод «Удаленный рабочий каталог /».
amyassin avatar
флаг cn
Кроме того, спасибо за подсказку `-hostkey`, я считаю, что это лучше ..
флаг so
Итак, вы *подключились*, потому что `ls` было воспринято как подтверждение подсказки (как `n`). А так как на входе больше не было команд, больше ничего не делалось. Хорошо, тогда извини. (Наоборот, с `-b` вы не подключитесь, так как нет ответа на подсказку).
флаг so
Значит, с `-b` вы не получите *"Удаленный рабочий каталог /"*, верно? Вопреки тому, что говорит ваш вопрос о SO.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.