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

scp с использованием пароля в командной строке

Я пытаюсь написать сценарий, который развернет сборку, созданную на моем настольном компьютере (windows / cygwin), на машине в моей тестовой среде (linux).

Я хотел бы использовать scp для копирования сборки на целевую машину. Единственная учетная запись на целевой машине - это root, и я не могу создать специального пользователя для этой задачи. Пользователь root не может войти в систему с помощью ключа ssh (я подозреваю, что это настроено на сервере ssh, но я не знаю, какие параметры конфигурации контролируют это). В любом случае я не могу изменить конфигурацию ssh-сервера.

Моя настольная машина использует Cygwin, и у меня установлен ssh. Что мне нужно, так это command-line-fu, которая позволит мне ввести пароль в командную строку.

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

Я рекомендую использовать для этой цели ssh-ключ. Если вы можете войти в систему как root, вы также можете изменить конфигурацию ssh-сервера.

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

Есть несколько предпосылок для SSH_ASKPASS работать:

  • В ssh команда не должна иметь доступа к tty.
  • В ssh команда должна думать, что у нее есть доступ к X-серверу. Достаточно установить необходимые переменные среды, даже если X-сервер, на который они указывают, не существует.
  • Сервер должен поддерживать аутентификацию по паролю.

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

В крайнем случае, если ничего из вышеперечисленного не работает, вам нужно обернуть ssh в скрипте, который подделывает tty и передает пароль через него. я использовал expect чтобы добиться этого.

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