pexpect.spawn('sudo ssh somehost')每次请求sudo密码

2024-10-02 22:38:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

所以我制作了一个python脚本sshOK,它使用pexpect来处理主机sshing的所有细节,比如回答yes来存储密钥,如果主机可以ssh并且一切正常,则返回true。在

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

有什么办法打电话吗

child=pexpect.spawn('sudo ssh somehost', Pty=get_parent_pty())

或者类似于我的python脚本sshOK,它使我正在运行的shellsshOK记得自动化吗?根据我对sudo的RTFM'ed,pexpect调用需要共享{a3}来继承凭据或类似的东西。期望的行为是:

^{pr2}$

而不是

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


Tags: 脚本bash密码forbinfoosudo密钥