Я только что написал очень простой сценарий Expect для работы с rsync, но, похоже, он доставляет мне неприятности.По сути, я автоматизирую приглашение входа в систему SSH, вызванное из rsync.Я также должен передать аргументы через rsync в SSH, чтобы он не делал проверку ключа хоста.Я хорошо знаю ключи аутентификации SSH и ssh-keygen, но у меня есть веские причины для таких действий, поэтому нет лекций по передаче паролей в командной строке.
Script
#!/usr/local/bin/expect -f
if {$argc != 5} {
puts "usage: remoteCopy {remotehost, username, password, localfile, remoteloc}"
exit 1
}
set remotehost [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
set localfile [lindex $argv 3]
set remoteloc [lindex $argv 4]
set timeout -1
spawn rsync -e \"ssh -q -o StrictHostKeyChecking=no\" $localfile $username@$remotehost:$remoteloc
expect "Password"; send "$password\r"
Вот полный вывод скрипта:
Вывод
avoelker@localhost $ ./remoteFileCopy.tcl remotehost remoteuser remotepass ~/localfile /tmp/
spawn rsync -e "ssh -q -o StrictHostKeyChecking=no" /localhost/home/avoelker/localfile remoteuser@remotehost:/tmp/
rsync: Failed to exec "ssh: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(83)
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(434)
send: spawn id exp6 not open
while executing
"send "$password\r""
(file "./remoteFileCopy.tcl" line 17)
avoelker@localhost $
Мне кажется, что rsync пытается выполнить "ssh
вместо ssh
однако, копирование и вставка первой строки вывода из стандартного вывода Expect (rsync -e "ssh -q -o StrictHostKeyChecking=no" /localhost/home/avoelker/localfile remoteuser@remotehost:/tmp/
) непосредственно в оболочку работает отлично, поэтому я знаю, что это не проблема с rsync.
Когда я удаляю-e аргумент полностью из строки spawn rsync
, сценарий Expect выполняется без ошибок, но я должен был бы добавить проверку подлинности ключа хоста в сценарий, что я не хочу делать.
Есть ли кто-то более опытныйс Expect / Tcl знаете что я делаю не так?