WSL2 Ubuntu:如何启动 ssh-agent 并在每个终端启动时自动添加 ssh 密钥

WSL2 Ubuntu:如何启动 ssh-agent 并在每个终端启动时自动添加 ssh 密钥

我在终端上使用 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

编辑注意:

我删除了不属于我的、但由其他人添加的技术文本。风格、语法、错别字等……欢迎指正。有人补充说他的她的想法我的答案不被赞赏。谢谢。

相关内容