Как я могу выполнить эквивалент "взаимодействия" Expect в Ruby? - PullRequest
0 голосов
/ 05 марта 2019

Я хочу создать сеанс SSH, ответить на запрос пароля для входа в систему и затем взаимодействовать с удаленной системой.Это легко сделать с Expect, но я нахожу сложным сделать это в Ruby.

В Expect я бы просто сделал что-то вроде:

log_user 0
spawn ssh user@host
expect "assword" { send "my_password\r" }
interact

ОднакоRuby IO # Ожидайте, метод не обеспечит интерактивность, которая мне нужна.Я также читаю документацию Net :: SSH , но не нашел очевидного способа сделать сеанс интерактивным после успешного входа в систему.

После успешного открытия соединения,что нужно, чтобы сделать TTY / PTY на удаленном хосте интерактивным?

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Я не могу комментировать, поэтому отправляю как ответ, так же как и я, используя утилиту sshpass (если ее у вас нет, вы можете легко установить)

#!/bin/ksh
IP=yourIP
ping -c 1 $IP 
if [ $? -gt 0 ]
 then
 echo "$IP not reachable." 
 exit
else
 echo "$IP is reachable"
fi
sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no username@$IP

если вы хотите записать вывод сеанса, вы можете направить вывод в файл журнала с помощью команды tee, например sshpass -p "yourpassword" ssh -o StrictHostKeyChecking=no username@$IP | tee -a logfile.log

0 голосов
/ 05 марта 2019

Если вы этого еще не сделали, установите гем net-ssh в командной строке.

gem install net-ssh

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

#!/usr/bin/env ruby
require 'rubygems'
require 'net/ssh'
HOST = '192.168.1.113'
USER = 'username'
PASS = 'password'

Net::SSH.start( HOST, USER, :password => PASS ) do|ssh|
result = ssh.exec!('ls')
puts result
end

После подключения к удаленному хосту сеанс должен быть «интерактивным», но, насколько мне известно, это не является эквивалентом взаимодействия Expect. Вот пара ссылок, которые охватывают встроенные в Ruby модули TTY и PTY: https://piotrmurach.github.io/tty/ http://ruby -doc.org / STDLIB-2.6.1 / libdoc / псевдотерминал / RDoc / PTY.html . Вам потребуется выполнить еще одну команду gem install на терминале Ruby для TTY.

...