0

我有一系列 bash 脚本,它们依赖于sudossh/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 密钥。

4

1 回答 1

1

看来正确的答案是……

所有的通信都发生在独立且完全不相交的 [pt] ty 中。凭证无法传输,pexpect 创建的 pty 无法链接到运行脚本的 tty。

于 2013-05-16T13:36:02.877 回答