我有一个现有的公钥/私钥对。私钥受密码保护,加密可以是 RSA 或 DSA。这些密钥是您生成ssh-keygen并通常存储在~/.ssh.
我想更改私钥的密码。在标准的 Unix shell 上,我该怎么做?
另外,我如何简单地删除密码?直接改成空?
我正在与 Apache2 和Passenger 合作进行Rails 项目。我想创建一个用于测试目的的自签名SSL 证书。
sudo openssl rsa -des3 -in server.key -out server.key.new
Run Code Online (Sandbox Code Playgroud)
当我输入上述命令时,它说
writing RSA key
Enter PEM pass phrase:
Run Code Online (Sandbox Code Playgroud)
如果我不输入密码,我会收到以下错误
unable to write key
3079317228:error:28069065:lib(40):UI_set_result:result too small:ui_lib.c:869:Yo
u must type in 4 to 1024 characters
3079317228:error:0906406D:PEM routines:PEM_def_callback:problems getting passwor
d:pem_lib.c:111:
3079317228:error:0906906F:PEM routines:PEM_ASN1_write_bio:read key:pem_lib.c:382
Run Code Online (Sandbox Code Playgroud)
是否可以在不提供 RSA 密钥的情况下生成 RSA 密钥pass phrase,因为我不确定/etc/init.d/httpd脚本将如何在没有人工干预的情况下启动 HTTP 服务器(即,如果我提供 4 个字符的密码短语,它希望我在启动 Apache HTTP 服务器时提供它)。
为了在新机器和环境上更轻松地设置无密码 SSH,是否有任何原因id_rsa.pub不能在网络上的某个地方发布文件(只是密钥对的公共部分)?例如在 dotfiles GitHub 存储库中。
我知道:
id_rsa文件(密钥对的私有部分)必须小心保护和但我的搜索没有出现任何明确的建议,即允许或鼓励这样做。
出于好奇,同样的建议是否适用于没有密码短语的密钥对?
我认为我的问题归结为密钥有问题,但我不能只是解密它,以便进一步调查,而不对其进行解析。但我不确定。
我正在尝试使用标准方法:
openssl rsa -in ./id_rsa -out ./id_rsa.decrypted
Run Code Online (Sandbox Code Playgroud)
我想我知道密码,因为当我输入错误时,我得到:
Enter pass phrase for ./id_rsa:
unable to load Private Key
140256774473360:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:544:
140256774473360:error:0906A065:PEM routines:PEM_do_header:bad decrypt:pem_lib.c:483
Run Code Online (Sandbox Code Playgroud)
“坏解密”很清楚。现在,当我输入看似不错的密码时,我会回来:
Enter pass phrase for ./id_rsa:
unable to load Private Key
139662870623888:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:153:
139662870623888:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1314:
139662870623888:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=RSA
139662870623888:error:04093004:rsa routines:OLD_RSA_PRIV_DECODE:RSA lib:rsa_ameth.c:115:
139662870623888:error:0D07207B:asn1 encoding routines:ASN1_get_object:header too long:asn1_lib.c:153:
139662870623888:error:0D068066:asn1 encoding routines:ASN1_CHECK_TLEN:bad object header:tasn_dec.c:1314:
139662870623888:error:0D07803A:asn1 encoding routines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:381:Type=PKCS8_PRIV_KEY_INFO
139662870623888:error:0907B00D:PEM routines:PEM_READ_BIO_PRIVATEKEY:ASN1 lib:pem_pkey.c:132:
Run Code Online (Sandbox Code Playgroud)
它也无法加载密钥,但现在它在 asn1 解析器上失败了,与密码无关。
我可以以某种方式获得未加密版本的密钥并使用其他工具查看有什么问题吗?
我看过一些帖子,说有些东西发生了变化,看似好的密钥的可能原因无法解析,但它们都适用于未加密的版本。但他们唯一的方法是我看到的 …
我目前使用没有密码短语的服务器 SSL 证书,以允许 Apache 无人值守启动。
有客户要求我们更安全地保护 SSL 证书。我还不确定他们的目标是什么,但现在我猜他们不想要磁盘上不受保护的 SSL 证书。我想我无法避免在 Apache 的内存中清楚地知道它,但让我们假设这是可以接受的。
我想出了一个精心设计的系统,将密码短语保存在内部服务器(即不在前线 Web 服务器上)的进程内存中,并使用 Apache SSLPassPhraseDialog ( http ://httpd.apache.org/docs/2.2/mod/mod_ssl.html#sslpassphrasedialog)。内部服务器必须在启动时输入密码短语,我们将有多个这样的服务器负载平衡以实现高可用性。
我的问题是:
我正在使用双重性在我的服务器上执行备份。现在,duplicity 正在使用 GPG 公私密钥系统加密备份。我更愿意只使用密码来加密备份文件,所以我不必尝试跟上秘密密钥。如何配置要以这种方式加密的备份?
谢谢,
麦克风
我有一个用于备份的 sh 脚本
scp /mybackupdir/* backupuser@backupserver:/backup
Run Code Online (Sandbox Code Playgroud)
有没有一种简单的方法可以向 scp 添加密码?或者我是否必须检查 ssh-agent 是否正在运行,如果没有启动并添加密钥?
我正在编写一个脚本来循环浏览已知主机名的列表,以便找到一个可以使用我的 SSH 密钥进行身份验证的工作 SSH 服务器。
密钥已经加载了ssh-agentand ssh-add,因此如果我连接到知道我的密钥的工作远程主机,则不会提示密码,并且我无需任何交互即可成功连接。
事情是,当远程主机不知道我的密钥时,ssh会用密码提示我(它没有机会成功,因为如果可以的话,由于 ,它已经让我登录了ssh-agent)。我想防止这种行为并ssh在ssh-agent身份验证失败时中止。
我目前正在使用以下命令绕过大部分交互,但我无法阻止我刚刚描述的交互:
$ ssh -i ~/.ssh/id_rsa \
-o UserKnownHostsFile=/dev/null \
-o KbdInteractiveAuthentication=no \
-o StrictHostKeyChecking=no \
-o PreferredAuthentications=publickey \
-o ConnectTimeout=1 \
$host -n "whoami"
Run Code Online (Sandbox Code Playgroud)
感谢您的回答。
我目前是一名程序员,因此需要不断将我的软件上传到远程系统进行测试。我有大约 7 台机器需要接收所有内容的副本。
目前,我有一个简短的 bash 脚本,其中有一个 scp 为每台远程机器执行传输:
echo -e "\nUpdating Taiwan Machine"
scp {file1,file} bschlinker@taiwan:/home/bschlinker/
echo -e "\nUpdating Wisconsin Machine"
scp -P 2400 {file1,file2} bschlinker@wisconsin:/home/bschlinker/
Run Code Online (Sandbox Code Playgroud)
我痛苦地被提示输入每台机器的密码。我知道我可以用 SSH 密钥解决这个问题——但我不想通过密钥对远程机器进行无密码身份验证。因此,我在 SSH 密钥上设置了密码。我读过一次输入密码后,它将在当前终端会话的其余部分保持活动状态。真的吗?如果没有,有什么想法吗?
为了远程访问 linux 服务器,管理员可能使用 Putty Key Generator 生成了公钥和私钥对,并向我发送了 .ppk 文件。我在 Putty 中加载了 .ppk 文件(具有私钥),现在可以通过 Putty 访问服务器,而不会提示输入密码或密码。
为了通过命令行 ssh 程序访问远程服务器,我将文件复制到 $HOME 中的 .ssh 目录下。但是当我尝试使用 ssh 命令访问该服务器时,该程序要求我输入密钥 (xyz.ppk) 的密码并且不接受简单的 Enter 并以以下消息终止:
Permission denied (publickey,keyboard-interactive)
Run Code Online (Sandbox Code Playgroud)
我需要做什么来解决这个问题?我只是想知道私钥是否受密码保护,为什么 Putty 不要求相同。
我希望 Putty Key Generator 生成的密钥也适用于命令行 ssh。
我正在运行一个 tinycore 机器,在将代码推送到 github 之前,我将代码存储在该机器上。这也是唯一一台在家里转发端口 22 的机器,因此我必须从这台机器上进行推送,因为 github 使用 ssh 作为执行推送和拉取的协议。我今天试图进行推送,但我收到了权限被拒绝(Publickey)错误,所以我没有阅读此页面所以我创建了一个 ssh 配置文件,~tc/.ssh/config内容如下:
Host github.com
User git
Hostname github.com
PreferredAuthentications publickey
IdentityFile /home/tc/.ssh/id_dsa.pub
Run Code Online (Sandbox Code Playgroud)
在尝试重新生成我的 dsa 密钥对后,我仍然遇到问题。
基本上,我看到的是在我运行后重新生成我的 dsa 密钥对之后
ssh-keygen -t dsa
然后我确认覆盖,按三次回车使用:默认位置/home/tc/.ssh/id_dsa(和 id_dsa.pub 在同一目录中),并且没有密码。我比尝试 ssh 到 github 来测试使用的连接ssh git@github.com并得到错误:
Permission denied (publickey).
所以我想这是因为我没有将我新生成的公钥添加到 github。因此,我获取公钥并将输出复制到我在 github 上的设置中,现在每次我尝试通过 ssh 连接到 github 时,它都会要求我输入密码,即使我从未指定过密码并且在查看之前它也没有询问我文件。此外,rw 的权限似乎仅适用于用户 tc。
passphrase ×12
ssh ×6
apache-2.2 ×2
openssl ×2
scp ×2
bash ×1
certificate ×1
dsa ×1
duplicity ×1
github ×1
gpg ×1
https ×1
linux ×1
public-key ×1
putty ×1
rsa ×1
security ×1
ssh-agent ×1
ssh-keygen ×1
ssh-keys ×1
ssl ×1
terminal ×1
unix ×1