python ssh 密码提示

标签 python ssh

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

这是

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 这样的工作流程管理器来处理 fabric ,除非您自己使用伪终端实现整个工作流程。您可以在不引入依赖项的情况下做到这一点,但坦率地说,不值得为错误或行为分歧而花费额外的表面积。

不过,如果你想尝试一下,这里是 a gist that outlines an approach 。您可以将其简化很多,但它涵盖了要点。

关于python ssh 密码提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46004848/

相关文章:

python - 向数据框中的 datetime64 列添加偏移量

ssh - ssh:连接到主机example.com端口22:权限被拒绝

git - ssh-keygen 使用 sshfp 生成 key

xcode - 如何让 Xcode 记住我的私有(private) git 存储库密码?

python - Matplotlib 文本边界框尺寸

python - 手动打开上下文管理器

python - [删除]从 JSON 字典中删除一个项目会留下一个空字典 : `{}` . 如何完全删除它?

python - 如何在 python 中创建一个非 root 记录器

ssh - 如何检查scp是否可用?

docker - 如何使用 secret 中的 ssh key 将私有(private) git 存储库克隆到 kubernetes pod 中?