我正在尝试在使用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将始终自动返回所需的密码,而无需用户自己输入。
任何想法或解决方案?
答案 0 :(得分:2)
SSH从终端读取密码,而不是从stdin读取密码,因此您无法使用subprocess.Popen
提供合成(未提示)密码。
我理解不想使用依赖项来装载您的应用程序,但我也建议使用paramiko
。如果没有这个,你会考虑使用像pyexpect
这样的工作流管理器来实现fabric
,除非你使用伪终端自己实现整个工作流程。你可以在不引入依赖关系的情况下做到这一点,但坦率地说,错误或行为分歧的额外表面区域是不值得的。
但是,如果你想尝试一下,这里是a gist that outlines an approach。你可以简化这一点,但它可以获得必需品。