在 Linux 和 Windows 上使用 OpenSSH 时,如何避免每次都输入 ssh 密钥的密码?

在 Linux 和 Windows 上使用 OpenSSH 时,如何避免每次都输入 ssh 密钥的密码?

(这是一个问题经过西里最初在 Stack Overflow 上发布并很快关闭。)

我用的是密码-protected ssh key (RSA)。(我以前称其为密码-protected ssh key,但这在技术上与 SSH 术语不一致。)这意味着我需要在使用密钥之前输入密码来解密密钥。这是一种很好的安全做法,可以作为防线,防止黑客访问我的机器并访问网络上的其他机器。但每次都输入密码很烦人。

我注意到,在某些计算机上,每次使用 ssh 密钥时,我不需要输入密码。但在我的 Windows 计算机以及某些 Linux 服务器上,我需要输入密码。

我在 Windows 上使用 Git Bash(之前的 OP 在 Windows 上使用 OpenSSH)。我们都不用 Putty,所以它和 Linux 上的密钥一样。存储在 /.shh 目录中。理想情况下,这可以在 shell(例如 Windows 上的 Git Bash、Ubuntu 终端和 PowerShell)和需要我的密码的 IDE(例如 VS Code 和 PyCharm)内工作。

我尝试使用 ssh-add,但它立即再次要求我输入密码:

(base) PS C:\code> ssh-add -k C:\Users\user\.ssh\id_rsa  
Enter passphrase for C:\Users\user\.ssh\id_rsa: 
Identity added: C:\Users\user\.ssh\id_rsa (C:\Users\user\.ssh\id_rsa)
(base) PS C:\code> git fetch
Enter passphrase for key '/c/Users/user/.ssh/id_rsa': 

有没有办法让我的 Windows 和 Linux 计算机记住它?

答案1

似乎您正在使用两个不兼容的 OpenSSH Windows 端口——ssh-add命令来自 Microsoft 维护的 Win32-OpenSSH,而sshGit 调用的客户端来自 Cygwin 或 MinGW。两者期望在不同的位置找到 ssh-agent 套接字(我不确定它们的套接字类型是否兼容)。

将您的$env:GIT_SSH环境变量指向C:\Windows\System32\OpenSSH\ssh.exe,或使用 Git 附带的版本ssh-add(或将 GIT_SSH 指向 PuTTY 的 plink.exe,然后使用 Pageant)。

相关内容