用于执行远程登录和执行另一个本地脚本的脚本

时间:2015-10-03 09:05:04

标签: linux scripting remote-access expect

我必须编写一个执行远程登录和身份验证的脚本,并在远程执行本地脚本。

我的原始代码是这样的:

#!/usr/bin/expect
spawn ssh user@ip "bash -ls" < ./script.bash
expect "password"
send "abc123/r"
interact

通过./my_script.sh

运行以下内容
spawn ssh user@ip "bash -ls" < ./script.bash
user@ip's password:
./script.bash: No such file or directory

但是,如果我运行没有参数的脚本,只需

#!/usr/bin/expect
spawn ssh user@ip
expect "password"
send "abc123/r"
interact

成功登录。

此外,如果我直接通过没有脚本的终端直接运行

ssh user@ip "bash -ls" < ./script.bash

然后通过提示输入密码后,本地文件在远程服务器上成功执行。因此,请您建议如何使我的原始代码成功运作。

2 个答案:

答案 0 :(得分:0)

使用script.bash

的完整路径
#!/usr/bin/expect
spawn ssh user@ip "bash -ls" < /the/full/path/script.bash
expect "password"
send "abc123/r"
interact

答案 1 :(得分:0)

那是因为expect不了解shell的输入重定向。试试这个:

spawn sh -c {ssh user@ip "bash -ls" < ./script.bash}

如果“user”或“ip”是变量,我们需要不同的引用。如

spawn sh -c "ssh $user@$ip 'bash -ls'  < ./script.bash"