Как указать пароль для команды su при использовании net / telnet в ruby? - PullRequest
0 голосов
/ 14 октября 2010

Я использую Net / TELNET для подключения к удаленному хосту, пытаясь запустить команду su для получения привилегий root.Вот как я это делаю

require 'net/telnet'

localhost = Net::Telnet::new("Host" => "192.147.217.27",
                             "Timeout" => 50,
                             "Prompt" => /[$%#>] \z/n)
localhost.login("dvsdkrp", "dvsdkvrp") { |c| print c }
localhost.cmd("cd /home/dvsdkrp/workdir/smruti") { |c| print c }
localhost.cmd("su") { |c| print c }
localhost.puts("passwd"){ |c| print c }

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

Password: C:/Ruby/lib/ruby/1.8/net/telnet.rb:552:in `waitfor': timed out
while waiting for more data (Timeout::Error)
        from C:/Ruby/lib/ruby/1.8/net/telnet.rb:679:in `cmd'
        from tel.rb:7

Что мне делать?

1 Ответ

1 голос
/ 14 октября 2010

Приглашение, которое вы указываете при создании объекта Telnet, - это то, что он будет искать, прежде чем выполнить следующую команду. Если вы рассчитываете тайм-аут, я думаю, это потому, что он не видит подсказки, которую он ожидает. Если вы используете опцию Match при отправке команды 'su', вы можете указать подсказку специально для этой команды.

su_prompt = "Password: "
localhost.cmd("String" => "su", "Match" => /#{su_prompt}/) { |c| print c }
localhost.cmd("passwd")

Это новое приглашение используется только для текущей команды. Первоначально указанное приглашение все еще действует до конца сеанса.

...