我使用的是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密码,并且我能够在执行top
时看到ssh代理。然而,尽管看到了这些命令的输出,但它实际上并没有初始化ssh代理或添加密钥。我甚至做了ssh-add -l
,它会输出:The agent has no identities.
我该怎么做才能做到这一点?这必须是一个WSL问题。
发布于 2023-03-22 07:30:02
哼..。您尝试加载~/id_rsa
。通常,键在~/.ssh
文件夹中。AFAIR在文件和文件夹权限方面也非常挑剔。如果某个密钥位于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
编辑说明:
我删除了不是我的技术文本,而是由其他人添加的。风格,语法,打字等等..。更正总是受欢迎的。有人给我的答案加上他/她的想法是不受欢迎的。谢谢。
https://unix.stackexchange.com/questions/740555
复制相似问题