Не совсем bash, но tcl, вернее утилитка от него expect (как правило есть в дефолтовой инсталяции на многих системах) и scp
Позволяет передать в вие аргумента скрипту пароль на сессию.
#!/usr/bin/expect
# Do not show stdout of spawn process
log_user 0
# Show debug messages
exp_internal 0
# Timeout for executing command
set timeout 29
#
match_max 1024
set hostip [lindex $argv 0]
set user [lindex $argv 1]
set passwd [lindex $argv 2]
set srcfile [lindex $argv 3]
set dstfile [lindex $argv 4]
set port 22
if { [llength $argv] < 5 } {
send_user "Usage ./scpput.tcl hostip user passwd srcfile dstfile \[port\]\n"
exit 1
}
if { [llength $argv] == 6 } {
set port [lindex $argv 5]
}
# Запись файла на удаленную хостовую машину
spawn scp -P $port $srcfile $user@$hostip:$dstfile
expect {
"?assword:" {
send "$passwd\r"
}
"(yes/no)" {
send "yes\r"
expect "?assword:"
send "$passwd\r"
}
timeout {
send_user "Timeout to connect $hostip:$port\n"
exit 2
}
eof {
send_user "Can't connect to $hostip:$port\n"
exit 2
}
}
expect eof
Костыли, но работает. :)