我想创建一个自动在多个Linux主机上安装的脚本。 我使用ssh密钥登录主机,在登录内部我想做一个sudo,我试图使用expect,我在工作站上但是我没有在服务器哪个运行剧本。 我怎么做,这是我的尝试,但没有运气:
#!/bin/bash
ssh user@station04 <<EOF
expect -d -c "
send \"sudo ls\"
expect {
\"password:\" { send '1234'; exp_continue }
\"$user@\"{
send "exit\r"
}
default {exit 1}
}"
EOF
exit
结果:
send: sending "sudo ls" to { exp0 }
expect: does "" (spawn_id exp0) match glob pattern "password:"? no
expect: read eof
expect: set expect_out(spawn_id) "exp0"
expect: set expect_out(buffer) ""
argv[0] = expect argv[1] = -d argv[2] = -c argv[3] =
send "sudo ls\r"
expect {
"password:" { send '1234'; exp_continue }
"@"{
send exitr
}
default {exit 1}
}
set argc 0
set argv0 "expect"
set argv ""
答案 0 :(得分:0)
A.K
这个怎么样? &lt; - 只需确保预期的提示。
#!/bin/bash
expect <<'END'
spawn ssh user@station04
expect "password:"
send "$pw\r"
expect "#"
send "sudo ls\r"
END
答案 1 :(得分:0)
我建议你对ssh部分使用公钥认证,然后使用类似的东西:
ssh -t username@server-ip -C "echo sudo-password | /usr/bin/sudo -S ls"
答案 2 :(得分:0)
你使用expect
不太正确 - 不要send
命令;而spawn
命令和send
只是它的输入。所以,你的脚本变成了:
ssh … <<EOF
expect -d -c "
spawn sudo ls
expect -nocase password: { send 1234\r }
expect eof
"
exit
EOF