Portál AbcLinuxu, 11. května 2025 04:34
`/usr/bin/sshpass -p ${SWPW} ssh -o "StrictHostKeyChecking=no" ubnt@${SW} 'bash -s' ./ubnt.switch ${SWPW} ${PB} ${PM}`
Ve scriptu "ubnt.switch" je sled příkazů oddělených enterem, kdy se předávají 3 parametry.
A co se mi nedaří je, aby se výsledek scriptu ubnt.switch (všechny jeho skrze parametry vyplněné příkazy) předal skrze SSH do antény jednotlivě, oddělené enterem.
Obsah scriptu ubnt.switch je:
enable
${1}
configure
interface 0/${2}
shutdown
exit
interface 0/${3}
no shutdown
exit
Potřebuji, aby se tyto příkazy předaly do antény (již tedy správně vyplněné).
Můžete mi poradit, jak postupovat? Děkuji Řešení dotazu:
/usr/bin/sshpass -p $SWPW ssh -o "StrictHostKeyChecking=no" ubnt@$SW bash ubnt.switch $SWPW $PB $PM
ubnt.switch: line 3: configure: command not found ubnt.switch: line 4: interface: command not found ubnt.switch: line 5: shutdown: command not foundUdělal jsem to tedy tak, že se nejdříve spustí script, který generuje ty příkazy a uloží je do souboru (už vyplněné) a tento soubor pak teprve předávám anténě:
`/bin/bash ubnt.switch $SWPW $PB $PM > changes/change.$SW`
`/usr/bin/sshpass -p $SWPW /usr/bin/ssh -o "StrictHostKeyChecking=no" ubnt@$SW 'bash -s' < ./changes/change.$SW`
Bohužel stále tu mám výsledek:
./check-status: line 21: _____: command not foundCož je právě řádek s příkazem začínajícím na sshpass. Tak teď nevím, jestli opravdu 'bash -s' < ./changes... způsobí předání všech těch příkazů do vzdáleného bashe, nebo spustí vzdálený bash a ty příkazy pak spouští lokálně (což by mi nedávalo smysl).
/usr/bin/sshpass -p XXX ssh -o "StrictHostKeyChecking=no" -t ubnt@XXX help
Výsledek:
_____ _
| ____|__| | __ _ ___ (c) 2010-2019
| _| / _ |/ _ |/ _ \ Ubiquiti Networks, Inc.
| |__| (_| | (_| | __/
|_____\__._|\__. |\___| https://www.ui.com
|___/
Welcome to EdgeSwitch
By logging in, accessing or using Ubiquiti Inc. (UI) products, you
acknowledge that you have read and understood the Ubiquiti Licence
Agreement (available in the WebUI and at https://www.ui.com/eula/)
and agree to be bound by its terms.
(hostname) >
Takže si můžu psát příkazy jaké chci, ale do konzole se zjevně nedostávají. Měl se vypsat help, nevypsalo se nic.
shell_exec("sshpass -p " . $argv[2]." ssh -o \"StrictHostKeyChecking=no\" ubnt@" . $argv[1] . " 'bash -s' < changes/change." . $argv[1]);
Tohle projde správně a udělá co má.
sshpass ... ssh ... user@host <<_EOF_ # promenne se nejdrive nahradi jejich hodnotou enable ${SWPW} configure interface 0/${PB} shutdown exit interface 0/${PM} no shutdown exit _EOF_
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.