Linux 如何使用expect运行SSH脚本?

Linux 如何使用expect运行SSH脚本?,linux,ssh,expect,Linux,Ssh,Expect,我可以使用expect在远程SSH主机上执行命令。只要我将自己限制为一行硬编码命令,一切都很好。不过,我想创建一个本地命令脚本,以便远程执行 此命令仅适用于单行命令: #!/usr/bin/expect set USER [lindex $argv 0] set PASSWORD [lindex $argv 1] set CMD [lindex $argv 2] set timeout 10 spawn ssh -o StrictHostKeyChecking=no "$USER" "$CM

我可以使用expect在远程SSH主机上执行命令。只要我将自己限制为一行硬编码命令,一切都很好。不过,我想创建一个本地命令脚本,以便远程执行

此命令仅适用于单行命令:

#!/usr/bin/expect

set USER [lindex $argv 0]
set PASSWORD [lindex $argv 1]
set CMD [lindex $argv 2]
set timeout 10

spawn ssh -o StrictHostKeyChecking=no "$USER" "$CMD"

expect {
        timeout {
                puts "Timeout happened"
                exit 8
                }
        eof {
                puts "EOF received"
                exit 4
                }
        -nocase "password:" {
                send "$PASSWORD\n"
                expect {
                        "keys" {
                        exit 200
                                }
                        -nocase "password:" {
                                        exit 1
                                        }
                        }
                }
}
这个不行:

#!/usr/bin/expect

set USER [lindex $argv 0]
set PASSWORD [lindex $argv 1]
set timeout 10

spawn ssh -o StrictHostKeyChecking=no "$USER" < /var/myscript.sh
#                           This don't work! ^^^^^^^^^^^^^^^^^^^

expect {
        timeout {
                puts "Timeout happened"
                exit 8
                }
        eof {
                puts "EOF received"
                exit 4
                }
        -nocase "password:" {
                send "$PASSWORD\n"
                expect {
                        "keys" {
                        exit 200
                                }
                        -nocase "password:" {
                                        exit 1
                                        }
                        }
                }
}
#/usr/bin/expect
设置用户[lindex$argv 0]
设置密码[lindex$argv 1]
设置超时10
spawn ssh-o strichostkeychecking=no“$USER”
我自己用
sh
应该比bash快几毫秒。我自己用
sh
应该比bash快几毫秒。
spawn bash -c "ssh -o StrictHostKeyChecking=no $USER < /var/myscript.sh"