Можете ли вы убедиться, что ваш send_data
звонок происходит после того, как вы получите приглашение от удаленного сервера? Попробуйте построить channel.on_data
блок вокруг вашего send_data
вызова, чтобы вы могли убедиться, что получили ожидаемое приглашение от сервера, прежде чем отправить ответ.
Возможно, вы не захотите использовать exec
здесь. Из документов для Net :: SSH :: Connection :: Channel:
Отправляет запрос на канал с просьбой
данная команда будет вызвана.
Вы хотите отправить текстовую строку, чтобы ответить на приглашение, а не вызывать команду. Документы показывают, что exec
используется для отправки полных команд CLI, таких как "ls -l /home".
Вместо этого send_data
, вероятно, то, что вы хотите. Документы показывают, что он использовался для отправки произвольного текста, такого как channel.send_data("the password\n")
. Обратите внимание, однако, это предложение в документах:
Обратите внимание, что это не сразу отправить
данные по каналу, но
вместо этого просто добавляет данные
в выходной буфер канала,
подготовиться к упаковке и
разослал в следующий раз соединение
принимает данные.
Возможно, вы захотите взглянуть на channel.request_pty
. Похоже, он предназначен для взаимодействия с консольным приложением.
Если вы пытаетесь (по сути) создать сценарий SSH-сеанса, который вы обычно выполняете вручную, вам может оказаться проще использовать expect
-подобный интерфейс (например, гем, такой как sshExpect может стоит попробовать).