我有一系列 bash 脚本,它们依赖于sudo
ssh/scp 一些具有 root 权限的主机。
因此,我制作了一个 python 脚本sshOK,它使用 pexpect 来处理 ssh 主机的所有细节,例如回答是以存储密钥并在主机可用于 ssh 并且一切正常时返回 true。
但是,每次在 python pexpect.spawn 中使用 sudo 都会要求我输入密码,而不是在 bash 脚本中调用 sudo 时每五分钟一次。
有什么方法可以打电话
child=pexpect.spawn('sudo ssh somehost', Pty=get_parent_pty())
或在我的 python 脚本sshOK中的类似内容,它使我正在运行sshOK的 shell记住该自动化?根据我对sudo的RTFM 信息, pexpect调用需要共享伪终端以继承凭据或类似的东西。期望的行为是:
[foo@bar bin]$ sshOK somehost
[sudo] password for foo:
Try ssh on somehost testing connection [--OK--]
[foo@bar bin]$ sshOK somehost
Try ssh on somehost testing connection [--OK--]
[foo@bar bin]$
并不是
[foo@bar bin]$ sshOK somehost
[sudo] password for foo:
Try ssh on somehost testing connection [--OK--]
[foo@bar bin]$ sshOK somehost
[sudo] password for foo:
Try ssh on somehost testing connection [--OK--]
[foo@bar bin]$
目标是稍后用更多的 python 和 pexpect 替换 bash 脚本,但现在的障碍是能够多次调用同一个脚本,而不必输入密码。
另一种方法是将使用 pexpect 的部分提取到单独的脚本中,将该脚本添加到 sudoers 并让整个脚本运行提升。不能为每个用户添加 ssh 密钥。