LINUX.ORG.RU

проблемы с реализацией ssh в TCL

 , ,


1

2

Всем привет! Не удается выполнить следующею задачу. Есть два файла main.tcl и slave.exp. В первом должна быть процедура ssh_conect, которая выполняет подключение с авторизацией к удаленной машине по ssh. В файле slave.exp должен выполняться вызов функции ssh_conect для подключения к удаленной машине. Сеанс ssh после вызова процедуры в slave.exp должен сохраняться для выполнения команд на удаленной машине!


Ответ на: комментарий от Xenius

Капитан Очевидность

Проблема в том, что этот клоун не может в программирование, а зачёт получить надо. Так-то!

anonymous
()
Ответ на: комментарий от WRG

спасибо!я начинаю только изучать tcl. Поэтому может вопрос поставлен некорректно.

volbet
() автор топика
Ответ на: spawn ssh от anonymous

ну вот к примеру, я хочу чтобы идентификация выполнялась с помощью процедуры «connect»

#!/usr/bin/env tclsh package require Expect

set host «100.140.100.471» set user «USERID» set pass «PASSWORD» set cmd «ls»

proc connect {user host pass} { spawn ssh -x -o PasswordAuthentication=true $user@$host set spid1 $spawn_id set timeout 300 expect { -i $spid1 «word:» { exp_send -i $spid1 $pass\r exp_continue } «$*» { send «ifconfig\r» return $spid1 } } return $spid1 }

#в основной теле хочу посылать команды на удаленную машину set A [connect $user $host $pass] expect { -i A «$*» { send «ls\r» } }

volbet
() автор топика
Ответ на: комментарий от volbet

upvar

По умолчению все переменные в TCL локальные. Чтобы другая процедура использовала соединение открытое процедурой connect надо $spawn_id передать на уровень выше с помощью upvar или вообще global.

anonymous
()
Ответ на: комментарий от ArcFi

#!/usr/bin/env tclsh package require Expect

set host "lhost" set user "USERID" set pass "PASSWORD" set cmd "ls" proc connect {user host pass} { global spid1 spawn ssh -x -o PasswordAuthentication=true $user@$host set spid1 $spawn_id set timeout 300 puts "timeout 1" expect { -i $spid1 "word:" { exp_send -i $spid1 $pass\r exp_continue } "$*" { send "ifconfig\r" return $spid1 } } return $spid1 }

set A [connect $user $host $pass] expect { -i A "$*" { send "ls\r" } }

volbet
() автор топика
Ответ на: Exploring expect от anonymous

Да её уже читал !Немного разобрал, получилось запустить, но суть spawn_id еще не до конца понял.

volbet
() автор топика
Ответ на: комментарий от volbet

суть spawn_id

Ты spawn программу - тебе возврашают spawn_id. Две программы одновременно - 2 разных spawn_id. Все последующие expect, send и interact должны знать с которой из программ им взаимодействовать - для этого им и нужен spawn_id конкретной программы.

PS. читайте книги, они рулез (с)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.