我必须编写一个执行远程登录和身份验证的脚本,并在远程执行本地脚本。
我的原始代码是这样的:
#!/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
然后通过提示输入密码后,本地文件在远程服务器上成功执行。因此,请您建议如何使我的原始代码成功运作。
答案 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"