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

Python pexpect.spawn(';sudo ssh somehost';)每次都要求输入sudo密码,python,sudo,pexpect,Python,Sudo,Pexpect,我有一系列bash脚本,它们依赖于sudo来ssh/scp一些具有root权限的主机 因此,我制作了一个python脚本sshOK,它使用pexpect来处理sshing主机的所有细节,例如回答yes以存储密钥,如果主机可用于ssh且一切正常,则返回true 但是,每次在python pexpect.spawn中使用sudo时都会要求我输入密码,而不是在bash脚本中使用sudo时每五分钟一次 有什么方法可以打电话吗 child=pexpect.spawn('sudo ssh somehost'

我有一系列bash脚本,它们依赖于
sudo
来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还记得自动化吗?根据我所说的,这个呼叫需要共享来继承凭证或类似的东西。期望的行为是:

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

正确的答案似乎是


所有的交流都发生在独立的、完全不相交的地方。无法传输凭据,并且无法将pexpect创建的pty链接到运行脚本的tty。

为您更改了它:)错误。。。真正的问题是,为什么在运行ssh时首先需要调用sudo?相反,请将当前用户的ssh密钥放在远程授权的\u密钥文件中?您可能希望避免在大量客户端上向授权的\u密钥添加多个公钥。一种选择是使用共享身份文件与SSH-I一起使用,但有些人可能会认为该文件一旦被多个用户读取,就会受到损害。我们选择只允许少数用户sudo访问ssh和scp。这样,我们可以通过向springboard计算机上的一个组添加一个用户名来授予访问权限。如果使用cfengine或puppet来管理状态,或者有一些其他聪明的方法来同步授权的_密钥,作为一个好的选择。你也可以让它们
sudo ssh
,而不需要密码。如果我们不在同一时间要求密码,OSI协议的政治和法律层就会出现问题。对不起,这对我来说是一种非常轻率的方式,我说“不,这是几百台计算机,您作为root用户可以访问可能的敏感文件,我们必须做出至少一半的努力来确保您是我们中的一员”;)