【问题标题】:sudo cmd via ssh with expect twice consecutively通过 ssh 的 sudo 命令,期望连续两次
【发布时间】:2011-11-03 06:16:17
【问题描述】:

我使用expect 通过 ssh 在远程主机中使用 sudo 执行一些命令。脚本如下:

spawn ssh -q ${user}@${host}
expect "*?assword:"
send "${pass}\r"
expect "${user}@"
send "sudo ls\r"
expect "*?assword:"
send "${pass}\r"
expect "${user}@"
send "exit\r"
interac

它第一次运行完美,但是当我连续执行它时发生了一些错误。那是因为sudo不会马上过期,所以如果短时间内sudo some命令两次,第二个可能不需要密码,因此上面脚本中的第二个send "${pass}\r"失败了!
那么,当 sudo 未过期时,我们如何检测并避免发送密码呢?谢谢!

【问题讨论】:

    标签: ssh expect sudo


    【解决方案1】:

    修改脚本,让 sudo 密码成为可选密码:

    send "sudo ls\r"
    expect {
        "*?assword:" {
            send "$pass\r"
            exp_continue
        }
        "$user@" {
            send "exit\r"
        }
    }
    interac
    

    【讨论】:

      【解决方案2】:

      在登录后清理运行sudo -k 的 sudo 身份验证缓存。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-11
        • 2016-02-25
        • 2014-09-08
        • 2015-05-12
        • 1970-01-01
        • 2017-05-15
        • 2017-12-04
        • 1970-01-01
        相关资源
        最近更新 更多