Использование expect для передачи пароля в ssh

Как я могу использовать ожидание отправки пароля для ssh-соединения.

скажите, что пароль был p @ ssword и команда ssh была ssh [email protected]

Что бы я сделал, если бы он вводил пароль, когда он говорит

пароль [email protected]:
?

Правильное действие с использованием пары ключей SSH не является вариантом, потому что мне пришлось бы использовать ssh (scp), чтобы поместить ключ на сервер, который запросит пароль.

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

rmeador 20.01.2009 00:18

Я знаю, но все делается в виде службы на машине с Windows. Это означает, что у меня нет возможности добавить ключ ssh, если это не было сделано вручную раньше, что не является вариантом.

Malfist 20.01.2009 00:21

@malfist - почему это не вариант? Обычно предполагается установка и настройка любого решения, так почему бы не сделать это ограничением установки / настройки? Если то, что вы делаете, не честно, вам следует подумать о том, чтобы сделать это правильно, а не придумывать какие-то хитрости.

Jason Coco 20.01.2009 00:23

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

Malfist 20.01.2009 00:26

Затем создайте свой собственный управляющий tty и выполните оттуда ssh ... это все еще звучит для меня очень подозрительно. Я не могу придумать ни одного случая незаконного использования такой «автоматизации».

Jason Coco 20.01.2009 00:36

Это называется удаленным резервным копированием сервера. И как мне создать свой собственный управляющий tty?

Malfist 20.01.2009 00:39

Итак, вы не можете найти ни одной законной причины для автоматизации входа на сервер по ssh?

Malfist 20.01.2009 00:43

Я этого не говорил, я сказал, что не могу придумать ни одного варианта использования вашей автоматизации. Есть много законных случаев, но большинство из них позволяют вам выполнить настройку. Что касается создания управляющего tty, задайте отдельный вопрос, слишком много, чтобы отвечать в комментариях :)

Jason Coco 20.01.2009 00:54

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

Jason Coco 20.01.2009 00:56

Законной причиной для этого может быть сценарий ssh-доступа к сетевые устройства, который не поддерживает вход на основе сертификата - например, Коммутаторы Cisco.

dunxd 10.08.2011 17:51

Есть и другие варианты использования. Моя - тестовая среда. Сертификаты меняются каждый раз при переустановке кода. Это часть процедуры тестирования. И тест должен быть автоматическим ... :)

bcelary 25.10.2011 12:18

Автоматизировать SSH-соединения с использованием аутентификации по паролю - плохая идея. Используйте аутентификацию с открытым ключом, и все станет намного проще.

dolmen 05.12.2013 21:22
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
40
12
60 865
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Не было бы проще использовать аутентификацию с открытым ключом и использовать ключ без парольной фразы?

Поскольку пользователь на исходной машине делает это, чтобы сделать ключ RSA

ssh-keygen -t rsa

Теперь скопируйте ~ / .ssh / id_rsa.pub на целевой компьютер и добавьте его в файл authorized_keys целевого пользователя.

Я почти уверен, что сделать то, что вы пытаетесь сделать, невозможно. Большинство приложений * nix, которые запрашивают пароль, считываются непосредственно из TTY, а не из стандартного ввода, поэтому вы не можете передать пароль внутрь. Вы можете, как уже упоминалось, настроить SSH так, чтобы он не запрашивал пароль, как объяснено здесь.

После того, как меня отвергли без видимой причины, я пошел и провел еще немного исследований по команде expect и обнаружил, что у нее есть команда send_tty, которая отправляет в / dev / tty вместо stdin, что может действительно делать то, что вы хотите ... Раньше я не знал об этой функции. Однако я все же рекомендую положить ключ на сервер.

Я знаю об этом, поэтому использую Expect, потому что он может так общаться.

Malfist 20.01.2009 00:20

Ваш самый быстрый путь вперед (если вы не хотите стать экспертом по Tcl, что было бы ... необычно ... в 2009 году), вероятно, будет использовать autoexpect. Вот страница руководства:

http://expect.nist.gov/example/autoexpect.man.html

Короче говоря, запустите autoexpect, запустите сеанс ssh, завершите то, что вам нужно сделать, прекратите автоматическое ожидание, а затем бейте клавиатуру по полученному беспорядку, пока он не сработает :) Я предполагаю, что вам не нужно ничего, кроме быстрого взломайте, чтобы разобрать ваши ключи, а затем, ну, похоже, вы уже знаете счет с этим.

И есть этот вопрос, который уже содержит пример, близкий к тому, что вы ищете.

Эй, не надо ругать tcl только потому, что у тебя нет GUTS, чтобы его выучить! ;)

falstro 20.01.2009 00:31

cygwin не предлагает автоматическое ожидание. Я бы так хотел.

Malfist 20.01.2009 00:41

Справочная страница ссылка на сайт для autoexpect в вашем ответе больше не работает.

Nicolai Fröhlich 07.11.2013 19:02
Ответ принят как подходящий

Я всегда использовал «правильное» решение, но в других ситуациях использовал expect.

Здесь Я нашел следующее предложение:

#!/usr/local/bin/expect
spawn  sftp  -b cmdFile [email protected]
expect "password:"
send "shhh!\n";
interact

Спасибо! Спасибо, что ответили на вопрос, а не рассказали мне, как мне это делать.

Malfist 20.01.2009 00:38

@Malfist: Мне неприятно это говорить, но я предпочитаю «объяснять альтернативные варианты», а не просто отвечать на вопрос. Я чувствую, что таким образом у вас будет больше возможностей.

Powerlord 21.01.2010 21:32

@Р. Бемроуз Наслаждайтесь попытками изменить лабиринт вместо того, чтобы помогать ему ориентироваться.

Kristopher Ives 17.09.2010 01:49

'expect не установлен по умолчанию. Загрузите программу и установите ее на машину unix »(источник linux-bsd-central.com/index.php/content/view/26). Доступно для скачивания на nist.gov/el/msid/expect.cfm

Daniel Dropik 30.05.2014 22:31

Cygwin имеет автоматическое ожидание, но его нет в пакете bin. запустите setup.exe и найдите ожидайте и установите флажок источника. вы увидите получившееся дерево в / usr / src, а там находится каталог expect / expect / examples. там находится копия сценария autoexpect.

Ключевое решение не будет работать ... потому что ключи должны быть доступны для чтения только человеку, запустившему ssh. На xp вы не можете создать ключевую структуру с правильными разрешениями. Так что ssh их не прочитает. Возможно, это изменилось, но в последний раз я проверял, что все еще не работает.

Добро пожаловать в Stack Overflow. Этот комментарий не подходит в качестве ответа. Как только вы наберете больше репутации, вы будете добавлять комментарии к вопросам и ответам.

bobs 29.01.2013 21:41

@ mikey-b В файловой системе NTFS вы можете использовать права доступа к файлу для защиты файла от посторонних глаз.

dolmen 05.12.2013 21:25

Другие вопросы по теме