- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想知道当我在脚本中使用subprocess
调用ssh-keygen
时是否需要做一些不同的事情。我正在Linux环境中运行。这是我的代码:
cfg_r = configparser.ConfigParser()
cfg_r.read('ssh_config.cfg')
p_mail=cfg_r.get('Company', 'mail')
bashCo m mand="ssh-keygen -t rsa -f /home/pi/.ssh/id_rsa - C \"{}\" -q -N \"\"".format(p_mail)
print(bashCommand.split())
proc = subprocess.Popen(bashCommand.split(),
stdout=subprocess.PIPE,
stderr=open('logfile_Get_conf.log', 'a'),
preexec_fn=os.setpgrp
)
outpu.stdout.read().decode('utf-8')
我使用configparser
来阅读除此之外的电子邮件,没有什么特别的。
bashCommand
应该是这样的:
ssh-keygen -t rsa -f /home/pi/.ssh/id_rsa -C "mail@gmail.com" -q -N ""
bashCommand.split()
也应该如此:
['ssh-keygen', '-t', 'rsa', '-f', '/home/pi/.ssh/id_rsa', '-C', '"mail@gmail.com"', '-q', '-N', '""']
非常奇怪的是,当我在 shell 中运行这个 bashCommand
时,没有出现任何问题:
ssh-keygen -t rsa -f /home/pi/.ssh/id_rsa -C "mail@gmail.com" -q -N ""
但是在我的日志文件中我仍然有这个错误:
Saving key "/home/pi/.ssh/id_rsa" failed: passphrase is too short (minimum five characters)
问题出在哪里?
最佳答案
我假设您正在类 Unix 环境中运行,并使用类似 bash
或类似的 shell(如变量 bashCommand
所暗示的那样)。 Windows 中的工作方式非常不同。
当您运行在 shell 中显示的命令时,作为 argv
传递给 ssh-keygen
的参数为(Python 语法):
['ssh-keygen', '-t', 'rsa', '-f', '/home/pi/.ssh/id_rsa', '-C', 'mail@gmail.com', '-q', '-N', '']
shell 展开字符串,并去掉所有引号。当您拆分命令时,参数将按原样传递,因为您没有为 Popen
指定 shell=True
。这意味着 ssh-keygen
的 argv
将是
['ssh-keygen', '-t', 'rsa', '-f', '/home/pi/.ssh/id_rsa', '-C', '"mail@gmail.com"', '-q', '-N', '""']
希望您能看到其中的差异。 -N
的参数不再为空。这是一个两个字符的字符串""
,显然少于五个字符。
您不需要字符串bashCommand
。使用列表要方便得多,然后直接将内容传递给 Popen
:
bashCommand = ['ssh-keygen', '-t', 'rsa', '-f', '/home/pi/.ssh/id_rsa', '-C', p_mail, '-q', '-N', '']
proc = subprocess.Popen(bashCommand, ...)
请注意,这样,您不需要对命令行进行任何字符串插值、花哨的分割、引用、转义或其他修改。
我曾提到过 Windows 上的工作方式非常不同。这是因为在 Windows 上,shell=True
始终被设置,并且您对此无能为力。 Windows 不会像 Unix 那样将 argv
传递给程序。相反,程序负责解析自己的命令行字符串,因此必须使用引号。使用 shell=True
通常会受到反对,因此我不建议使用它作为类 Unix 情况的解决方案(但它会起作用)。
正如评论中提到的,您的代码中还存在鲁棒性、可维护性和美观性方面的其他问题。但是,它们都不应阻止其正常运行。
关于python - 使用子进程调用时,ssh-keygen 会引发密码太短错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57167936/
1 本机创建ssh密钥 ssh-keygen 2 拷贝公共密钥到“被登陆机”输入密码, scp id_rsa.pub root@10.35.0.35:
ssh-agent、ssh-add 都可以在运行 PowerShell/Posh-Git 的 Cmder 上运行 我添加了C:\Program Files\Git\usr\bin环境变量 ssh-ke
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我不小心为不存在的用户创建了 kengen。命令是 cat ~/.ssh/authorized_keys >> keydir/jpeck.pub 但实际上......我不是故意这样做的。 我已经使用
$ ssh-keygen --help ssh-keygen: unrecognized option: - usage: ssh-keygen [-q] [-b bits] [-t dsa | ec
我运行 git push -u origin master 它告诉我“权限被拒绝(公钥)致命:远程端意外挂断” 然后我在网上查了一下,发现我必须为我在 GitHub 上的帐户生成一个 ssh key
我正在尝试添加 ssh key 以供在 github 上使用,但在我的 xp 上,在命令提示符下 ssh-keygen 不起作用。它给了我以下错误 ssh-keygen' is not recogni
我想在Centos7上用shell脚本自动生成一对ssh key,我试过了 yes "y" | ssh-keygen -t rsa echo "\n\n\n" | ssh-keygen... echo
我正在尝试调用 ssh-keygen通过 bash 使用变量作为输入而不是文件来获取公钥的指纹。我知道我可以使用临时文件来解决此问题,但出于超出此问题范围的原因,我不想这样做。 此方法不有效,因为它说
我不知道如何在我的服务器上为其他用户创建公钥/私钥。在我的服务器上,我通过 shell 键入以下内容 (uiserver):john:> ssh-keygen -t dsa 之后,我输入文件名和密码,
我正在使用以下命令在我的 MAC 上生成 SSH 注册机 ssh-keygen -t rsa -b 4096 -C "" 我想为我的两个 GitHub 帐户创建两个 SSH-keygen,然后分别使用
我跑了ssh-keygen在 OS X 上,当我显示生成的公钥时,我看到我的登录名和机器名称出现在 key 的最后一部分。有没有办法让它使用不同的值或根本不使用它? 最佳答案 从联机帮助页“ssh-k
当我在我的 git bash 中运行 ssh-keygen 时,我被要求输入一个文件名以将 key 保存在那里。 在我输入名字后,我被问到另一个问题: "Enter passphrase" 当我现在开
我需要使用代码隔离Linux机器上的ssh指纹。我可以运行ssh-keygen -lf /etc/ssh/ssh_host_rsa_key.pub来获取它: [root@foo ssh]# ssh-k
我正在尝试在 Windows 上为 Git 生成 SSH key (我刚刚安装了 2.18.0),但它没有找到名为 ssh_askpass 的东西: d:\src\py\>ssh-keygen -b
我想知道当我在脚本中使用subprocess调用ssh-keygen时是否需要做一些不同的事情。我正在Linux环境中运行。这是我的代码: cfg_r = configparser.Confi
我正在尝试建立与远程服务器的连接,因为我不想每次决定创建公钥-私钥对并将其用于身份验证时都插入密码。 您可以在这两个来源找到我遵循的过程: How to forge.com The Geek stuf
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 6 年前。 Improve
我正在尝试使用此处第 7.7 节中的示例使 CyaSSL 的 Keygen 功能正常工作:http://www.yassl.com/yaSSL/Docs-cyassl-manual-7-keys-an
如果我使用 rsa 加密 key 加密静态字符串 + 随机数据,然后在我的程序中,使用相应的 rsa 解密 key 对其进行解密并检查是否存在静态字符串,是否可以避免“纯" key 生成器(不修改可执
我是一名优秀的程序员,十分优秀!