Ваше решение работает как с sshpass, так и без него. Если оно не работает у вас, вероятно, что-то еще не так.
Также обратите внимание, что вы всегда должны заключать в кавычки каждую переменную.
Кроме того, вам не следует легкомысленно отключать stricthostkeychecking. Если ваш ключ хоста часто меняется, ваш сервер, вероятно, скомпрометирован
Вот несколько способов достижения цели:
Использование разделителя команд (;
, &&
,||
)
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" 'command_one; command_two; command_three'
Использование здесь -doc (Одинарная кавычка EOF для расширения любых переменных/команд на удаленном хосте):
sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress" <<EOF
command_one
command_two
command_three
EOF
Использование отдельного файла:
файл.sh
command_one
command_two
command_three
Затем выполнить так:
cat file.sh | sshpass -p "$password" ssh -t -oStrictHostKeyChecking=no "$username@ipaddress"
Использование ssh-туннеля:
sshpass -p "$password" ssh -f -L 3306:localhost:3306 "$username@ipaddress" sleep 300 # This will open a tunnel to the remote host and hold it open for 5 minutes
ssh -T "$username@ipaddress" 'command_one'
ssh -T "$username@ipaddress" 'command_two'
ssh -T "$username@ipaddress" 'command_three'