python ssh密码提示

时间:2017-09-01 16:53:42

标签: python ssh

我正在尝试在使用ssh时提示自动密码传递。 通常,rsa密钥用于防止密码提示,但我不能保证每个用户都设置正确,所以我希望脚本在用户给出时自动设置密码

这是

ssh = subprocess.Popen(["ssh", "localhost", "python -c 'print \"I am running\"' "], shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> Password:

我尝试过的解决方案是

import sys, subprocess

class GetPass():
    def __init__(self, password):
       self.password=str(password)
    def readline(self):
        return self.password

sys.stdin = GetPass('mypassword')
# test raw_input 3 time to verify
raw_input()    
>> 'mypassword'
raw_input()    
>> 'mypassword'
raw_input()    
>> 'mypassword'

# Now try sshing again
ssh = subprocess.Popen(["ssh", "localhost", "python -c 'print \"I am running\"' "], shell=False,stdout=subprocess.PIPE,stderr=subprocess.PIPE)
>>> Password:

这不起作用,因为仍然提示请求密码。 我们的想法是,替换sys.stdin的GetPass将始终自动返回所需的密码,而无需用户自己输入。

任何想法或解决方案?

1 个答案:

答案 0 :(得分:2)

SSH从终端读取密码,而不是从stdin读取密码,因此您无法使用subprocess.Popen提供合成(未提示)密码。

我理解不想使用依赖项来装载您的应用程序,但我也建议使用paramiko。如果没有这个,你会考虑使用像pyexpect这样的工作流管理器来实现fabric,除非你使用伪终端自己实现整个工作流程。你可以在不引入依赖关系的情况下做到这一点,但坦率地说,错误或行为分歧的额外表面区域是不值得的。

但是,如果你想尝试一下,这里是a gist that outlines an approach。你可以简化这一点,但它可以获得必需品。