我试图在使用 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:
这不起作用,因为仍然提示请求密码。
这个想法是 GetPass 替换 sys.stdin 将始终自动返回所需的密码,而无需用户自己输入。
有什么想法或解决方案吗?
SSH 从终端读取密码,而不是从标准输入读取密码,因此您无法使用以下命令提供合成(未提示)密码subprocess.Popen
.
我知道不想让您的应用程序充满依赖项,但我也建议paramiko
为了这。如果没有它,您将考虑使用工作流程管理器,例如pyexpect
for fabric
无论如何,除非您使用伪终端自己实现整个工作流程。您可以在不引入依赖项的情况下做到这一点,但坦率地说,不值得为错误或行为分歧而花费额外的表面积。
不过,如果你想尝试一下,这里有概述方法的要点 https://gist.github.com/virtuald/54c8657a9ea834fb7fdd。您可以将其简化很多,但它涵盖了要点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)