Vuoi migliorare questa domanda? Aggiorna la domanda in modo che sia in argomento per Unix e Linux Stack Exchange.
Chiuso 2 anni fa.
Migliora questa domanda
C'è un modo per usare i comandi multipli in sshpass
, ho provato con combinazioni di differenze ma genera un errore.
$ sudo sshpass -p $password ssh -t -oStrictHostKeyChecking=no [email protected]$ipaddress << EOF
command_one
command_two
command_three
EOF
Qual è il comando corretto ed esatto, per favore forniscimi un esempio se possibile.
Risposta accettata:
La tua soluzione funziona con o senza sshpass, se non funziona per te è probabile che ci sia qualcos'altro che non va.
Tieni inoltre presente che dovresti sempre citare ogni variabile.
Inoltre, non dovresti disabilitare il stricthostkeychecking alla leggera. Se la tua chiave host cambia frequentemente, il tuo server è probabilmente compromesso
Tuttavia, ecco alcuni modi per raggiungere il tuo obiettivo:
Utilizzando un separatore di comandi (;
, &&
, ||
)
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "[email protected]" 'command_one; command_two; command_three'
Utilizzando un here-doc (virgolette singole EOF per espandere eventuali variabili/sostituzioni di comandi sull'host remoto):
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "[email protected]" <<EOF
command_one
command_two
command_three
EOF
Utilizzando un file separato:
file.sh
command_one
command_two
command_three
Quindi esegui in questo modo:
cat file.sh | sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "[email protected]"
Utilizzando un tunnel 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'