mit expect auf remote server sed befehl absetzen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
outbreak88
Beiträge: 1
Registriert: 24.06.2011 11:00:09

mit expect auf remote server sed befehl absetzen

Beitrag von outbreak88 » 24.06.2011 11:36:20

Hallo,
bin noch recht neu mit Linux unterwegs und hab beim entwickeln eines Script ein kleines Problem.
Folgender Befehl bei direkteter Eingabe auf einem Zielsystem:

Code: Alles auswählen

sed -i.tor 's/ipt6or4 -A 2outp -p tcp -o eth0 -d $i --dport 383 -j ACCEPT/&\nipt6or4 -A 2inp  -p udp -i eth0 -s $i --dport 161 -j ACCEPT\nipt6or4 -A 2outp -p udp -o eth0 -d $i --sport 161 -j ACCEPT\nipt6or4 -A 2outp -p udp -o eth0 -d $i --dport 162 -j ACCEPT/'" /etc/init.d/iptables
Sinn ist kurz erklärt. Auf dem System werden unter den Portfreigaben von telnet (383) noch 3 Einträge für SNMP(161,162) hinzugefügt.

Als nächstes soll dieser Befehl *passwortlos* auf einem Zielrechner ausgeführt werden.(add_snmp_to_iptables.sh)

Code: Alles auswählen


hostname=( host1 host2  )
password=123
COMMAND="sed -i.tor 's/ipt6or4 -A 2outp -p tcp -o eth0 -d $i --dport 383 -j ACCEPT/&\nipt6or4 -A 2inp  -p udp -i eth0 -s $i --dport 161 -j ACCEPT\nipt6or4 -A 2outp -p udp -o eth0 -d $i --sport 161 -j ACCEPT\nipt6or4 -A 2outp -p udp -o eth0 -d $i --dport 162 -j ACCEPT/' /etc/init.d/iptables.sla"

for name in ${hostname[@]}
	do
		echo +++ changing iptables rules on $name +++
		# other stuff on $name
		expect -c "
             #exp_internal 1 # uncomment for debugging
			 
             spawn ssh2 root@$name $COMMAND
             expect { 
               "*password:*" { send $password\r\n; interact; send} 
               eof { exit }
             }
             exit
             "
     wait
done
Hier bringt er mir jetzt ständig Fehler, offensichtlich verursacht durch das " ' ` gedöns :(
Habe schon zig Varianten durch, aber ich bekomm es einfach nicht hin :evil:
Jemand Denkanstösse oder Lösungen?

Benutzeravatar
SubOptimal
Beiträge: 1709
Registriert: 10.01.2005 23:25:46
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: bei Frankfurt

Re: mit expect auf remote server sed befehl absetzen

Beitrag von SubOptimal » 24.07.2011 20:31:36

Hi,

erset in COMMAND"..." die $i durch \$i, ansonsten ersetzt die $SHELL diese Stelle mit dem Wert der Variablen »i«.

SubOptimal

Antworten