Назад | Перейти на главную страницу

Как я могу автоматизировать извлечение файлов через psftp шпатлевки?

У меня есть Windows Server 2003, и он использует psftp для подключения к удаленной машине с Linux и загрузки файлов каждый час.

У меня две основные проблемы с этой машиной:

Первый

Запланированные задачи в настоящее время настроены на запуск от имени пользователя в этом поле, что, как я считаю требует сохранение пароля пользователя в планировщике задач. Однако при изменении пароля пользователя задача не запускается. Я бы хотел, чтобы эта задача всегда выполнялась независимо.

Второй

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

Но, судя по "HKEY_CURRENT_USER", не думаю, что это будет для SYSTEM пользователь. Если я настрою эту задачу для запуска как SYSTEM, как я могу убедиться, что соответствующий ключ сохранен в реестре для хоста? Я не против добавить его вручную (есть perl-скрипт для преобразования файла known_hosts), но куда он должен идти?

пс: myscript.bat просто использует psftp.exe для извлечения файлов с удаленного сервера. Ничего особенного. Нет флага, позволяющего пропустить проверку авторизованных хостов, и люди в putty упоминают, что это в любом случае было бы плохой идеей.

Я считаю, что решение первой проблемы - запустить запланированную задачу как SYSTEM. Это правильно?

Как правило, вы должны запускать что-то как SYSTEM только в том случае, если ему действительно нужен этот абсолютный уровень привилегий. Гораздо лучшим выбором может быть настройка учетной записи службы только для этой задачи. Затем вы можете отключить истечение срока действия пароля для учетной записи или настроить расписание уведомлений, чтобы напомнить вам об обновлении пароля учетной записи службы и сведений о задаче.

Вы, конечно, можете временно войти в эту сервисную учетную запись, чтобы принять ключ SSH в первый раз.

Использовать pscp.exe -batch -load PROFILE в командной строке. Настройте профиль для вашего подключения, используя пару ключей ssh ​​для этого профиля, а затем используйте этот профиль.

Учетная запись пользователя, которую вы используете для этого, должна быть локальной, но не требует каких-либо особых привилегий (просто считайте ключ и пишите файлы).

Пытаться pscp -h для всех командных переключателей.

Я понимаю, что на этот вопрос уже есть принятый ответ, но я подумал, что добавлю ответ о том, где находится куст реестра пользователей учетной записи SYSTEM. Это на самом деле в HKEY_USERS\.DEFAULT который большинство людей ошибочно полагают, является пользовательским кустом по умолчанию для вновь созданных учетных записей. Более подробная информация об истории и предыстории ключа находится в блоге Рэймонда Чена MSDN здесь:

Пользователь .Default не является пользователем по умолчанию

Я знаю, что это старый пост, но я помещаю его здесь, чтобы помочь другим пользователям решить ту же проблему.

В наборе утилит putty (plink, pscp, psftp и т. Д.) Есть опция -hostkey. Это позволяет вам включать ключ хоста целевого сервера без необходимости копировать regkeys в другие учетные записи (например, SYSTEM).

pscp.exe /? покажет вам правильный синтаксис.

-hostkey xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx: xx

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

В командной строке это будет выглядеть примерно так:

The server's rsa2 key fingerprint is:
ssh-rsa 2048 7b:e5:6f:a7:f4:f9:81:62:5c:e3:1f:bf:8b:57:6c:5a

использование:

pscp.exe -hostkey 7b:e5:6f:a7:f4:f9:81:62:5c:e3:1f:bf:8b:57:6c:5a -batch -i your-private-key.ppk C:\source.file user@10.10.10.10:/var/www/html/

Это работает, когда запускается как запланированная задача, запущенная от учетной записи SYSTEM.

Надеюсь, это кому-то поможет.

Я бы не стал использовать такую ​​систему. Я бы просто создал нового пользователя с именем puttyservice, установил его, чтобы он никогда не истекал, и вперед. Очевидно, вы бы использовали этот новый профиль пользователя.

Я бы также подумал об установке более надежного решения, например Cygwin и используйте версию ssh OpenSSH вместо putty. Это стандартная версия для каждой системы Linux, которая может быть более надежной и простой в работе, чем putty. Конечно, вы потеряете графический интерфейс, но с точки зрения сценариев это не имеет значения.