![WSL2 Ubuntu:如何启动 ssh-agent 并在每个终端启动时自动添加 ssh 密钥](https://linux22.com/image/218368/WSL2%20Ubuntu%EF%BC%9A%E5%A6%82%E4%BD%95%E5%90%AF%E5%8A%A8%20ssh-agent%20%E5%B9%B6%E5%9C%A8%E6%AF%8F%E4%B8%AA%E7%BB%88%E7%AB%AF%E5%90%AF%E5%8A%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E6%B7%BB%E5%8A%A0%20ssh%20%E5%AF%86%E9%92%A5.png)
我在终端上使用 WSL2,并安装了 Ubuntu。我已将以下内容添加到我的.bashrc
:
# Start ssh-agent
# check if ssh-agent is already running
if [ -z "$SSH_AUTH_SOCK" ]; then
#start ssh-agent
eval "$(ssh-agent -s)"
fi
# Ask for ssh-add
read -p "Do you want to add your SSH public key? (y/n) " response
if [ "$response" = "y" ]; then
ssh-add ~/id_rsa
ssh-add -l
elif [ "$response" = "n" ]; then
echo "No identity on terminal session"
else
echo "Invalid response"
fi
我的想法是,每次打开新终端时,如果需要身份,它都会询问提示,然后继续启动 ssh-agent 并在需要时添加密钥。起初,看起来好像脚本可以工作,它会显示代理的 PID,并提示输入我的 ssh 密码,并且当我这样做时,我能够看到 ssh 代理top
。然而,尽管看到了这些命令的输出,但它实际上并没有初始化 ssh-agent 也没有添加密钥。我什至这样做了ssh-add -l
,它会输出:The agent has no identities.
我该如何去做这项工作?这一定是 WSL 问题。
答案1
嗯...你尝试加载~/id_rsa
。通常,密钥位于~/.ssh
文件夹中。 AFAIR ssh 对文件和文件夹权限也非常挑剔。如果密钥位于 ssh 认为不够安全的目录中,则它不会使用它。
如果您的密钥确实位于 中~
,请将其(以及相应的.pub
文件)移至该~/.ssh
文件夹中。确保您拥有这些文件并且~/.ssh
具有0700
模式,~/.ssh/id_rsa
应该具有0600
模式。如果您不知道如何执行此操作,请参阅 chmod(1)。
另外,不需要为 ssh-add 提供文件名。根据手册页:
ssh-add
将私钥身份添加到身份验证代理,ssh-agent(1)
.当不带参数运行时,它会添加文件~/.ssh/id_rsa
、~/.ssh/id_ecdsa
、~/.ssh/id_ecdsa_sk
、~/.ssh/id_ed25519
、~/.ssh/id_ed25519_sk
和~/.ssh/id_dsa
。加载私钥后,...
简而言之 :
- 确保您的关键文件位于
~/.ssh
文件夹中, - 在你的
.bashrc
文件中只需使用ssh-add
.
快速说明:有问题.bashrc
不一定是好事。.bashrc
在非交互式情况下加载时存在这种情况(但在 WSL 中可能不存在) 。如果你真的想问问题,阅读答案,通过测试来保护整个事情PS1
if test "$PS1"; then
if [ -z "$SSH_AUTH_SOCK" ]; then
#start ssh-agent
eval "$(ssh-agent -s)"
fi
# Ask for ssh-add
read -p "Do you want to add your SSH public key? (y/n) " response
# and so on...
fi
编辑注意:
我删除了不属于我的、但由其他人添加的技术文本。风格、语法、错别字等……欢迎指正。有人补充说他的她的想法我的答案不被赞赏。谢谢。