Chcete zlepšit tuto otázku? Aktualizujte otázku, aby byla aktuální pro Unix a Linux Stack Exchange.
Zavřeno před 2 lety.
Vylepšete tuto otázku
Existuje způsob, jak použít více příkazů v sshpass
, zkoušel jsem s rozdílnými kombinacemi, ale hází to chybu.
$ sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no [email protected]$ipaddress << EOF
command_one
command_two
command_three
EOF
Jaký je správný a přesný příkaz, uveďte prosím příklad, pokud je to možné.
Přijatá odpověď:
Vaše řešení funguje s nebo bez sshpass, pokud vám nefunguje, je pravděpodobně něco jiného špatně.
Mějte také na paměti, že byste vždy měli uvádět každou proměnnou.
Navíc byste neměli lehce deaktivovat stricthostkeychecking. Pokud se váš hostitelský klíč často mění, váš server je pravděpodobně kompromitován
Zde je několik způsobů, jak dosáhnout svého cíle:
Použití oddělovače příkazů (;
, &&
, ||
)
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "[email protected]" 'command_one; command_two; command_three'
Použití here-doc (EOF v jednoduchých uvozovkách, aby se všechny proměnné/náhrady příkazů rozšířily na vzdáleném hostiteli):
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "[email protected]" <<EOF
command_one
command_two
command_three
EOF
Použití samostatného souboru:
soubor.sh
command_one
command_two
command_three
Poté proveďte takto:
cat file.sh | sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "[email protected]"
Použití tunelu ssh:
sshpass -p "$password" ssh -f -L 3306:localhost:3306 "[email protected]" sleep 300 # This will open a tunnel to the remote host and hold it open for 5 minutes
ssh -T "[email protected]" 'command_one'
ssh -T "[email protected]" 'command_two'
ssh -T "[email protected]" 'command_three'