【发布时间】:2017-04-18 16:39:06
【问题描述】:
我想创建一个在多个 linux 主机上自动安装的脚本。 我使用 ssh 密钥登录到主机,在登录内我想做一个 sudo,我正在尝试使用期望,它在站上但 我在服务器上没有 运行剧本。 我该怎么做,这是我的尝试,但没有运气:
#!/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 ""
【问题讨论】:
-
您是否可以控制这些系统上的
/etc/sudoers?如果是这样,最好的方法是修改该文件并指定ls(或您正在运行的其他任何东西)可以由user调用而无需密码。这样一来,您就不会在代码中嵌入明文密码并冒着被盗的风险。 -
不,我无法控制 sudoers。完成后我会从脚本中删除密码
-
除了“不走运”之外,您是否有关于失败的描述?是否有任何消息(例如,关于缺少 tty 的投诉)?