首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WSL2 Ubuntu:如何启动ssh-agent并在每个终端启动时自动添加ssh键

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

Unix & Linux用户
提问于 2023-03-22 05:51:28
回答 1查看 560关注 0票数 1

我使用的是WSL2,在终端上安装了Ubuntu。我在我的.bashrc中添加了以下内容:

代码语言:javascript
运行
复制
# 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问题。

EN

回答 1

Unix & Linux用户

发布于 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测试来保护整个事情

代码语言:javascript
运行
复制
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

编辑说明:

我删除了不是我的技术文本,而是由其他人添加的。风格,语法,打字等等..。更正总是受欢迎的。有人给我的答案加上他/她的想法是不受欢迎的。谢谢。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/740555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档