pexpect.spawn('sudo ssh somehost')每次都要求输入sudo密码

时间:2013-05-15 14:02:22

标签: python sudo pexpect

我有一系列依赖sudo的bash脚本来ssh / scp一些具有root权限的主机。

所以我创建了一个python脚本 sshOK ,它使用pexpect来处理sshing主机的所有细节,例如回答yes来存储密钥,如果主机可用于ssh,则返回true没关系。

但是,每次在python pexpect.spawn中使用sudo时,我都会被要求输入密码,而不是每次使用bash脚本调用sudo时每五分钟一次。

有什么方法来调用

child=pexpect.spawn('sudo ssh somehost', Pty=get_parent_pty())
我的python脚本 sshOK 里面的

或者类似的东西让我运行 sshOK 的shell记得自动化吗?从我对RTFM提出的关于sudo pexpect呼叫需要共享pseudo terminal的内容来继承凭据或类似内容。期望的行为是:

[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密钥不是一种选择。

1 个答案:

答案 0 :(得分:1)

似乎正确答案是......

没有

所有的沟通都是在不同的,完全不相干的[pt] ty中发生的。凭据无法转移,pexpect创建的pty无法链接到运行脚本的tty。