AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 672346
Accepted
Click Upvote
Click Upvote
Asked: 2015-03-02 17:57:20 +0800 CST2015-03-02 17:57:20 +0800 CST 2015-03-02 17:57:20 +0800 CST

通过 SSH 登录时运行 ssh-agent 和 ssh-add 的直接方式?

  • 772

当我通过 ssh 登录到我的服务器时,我试图让以下命令自动执行:

ssh-agent /bin/bash
ssh-add ~/.ssh/id_rsa

我的 ssh 密钥有一个密码,每次登录一次就可以了。

我尝试将它放在我的 .bashrc 文件中,但是我相信 ssh-agent 会启动一个新的 bash 会话。当我在 .bashrc 中有此内容后尝试登录时,它卡住了,我必须输入“退出”才能看到“输入密码以解锁密钥”提示

还有其他建议吗?

服务器正在运行 Ubuntu LTS

ubuntu
  • 4 4 个回答
  • 89498 Views

4 个回答

  • Voted
  1. Best Answer
    Tobi Oetiker
    2015-03-02T23:50:12+08:002015-03-02T23:50:12+08:00

    您可以尝试添加以下内容:

    eval $(ssh-agent -s)
    ssh-add ~/.ssh/id_rsa
    

    这种方式ssh-agent不会启动一个新的 shell,它只是在后台启动自己并吐出 shell 命令来设置适当的环境变量。

    正如评论中所说,也许您根本不想在远程主机上运行代理,而是在您正在使用的机器上运行代理,并使用

    ssh -A remote-host
    

    将本地 ssh 代理的服务转发到远程主机。

    出于安全原因,您应该只对由值得信赖的人运行的主机使用代理转发,但这比随时远程运行完整的代理要好。

    • 73
  2. womblerone
    2020-06-11T01:32:49+08:002020-06-11T01:32:49+08:00

    另一种选择是将其添加到您的 .bashrc 中。这与 Erik 的回答(确保单个实例)具有相同的优势,但不需要额外的包。

    # SSH Agent should be running, once
    runcount=$(ps -ef | grep "ssh-agent" | grep -v "grep" | wc -l)
    if [ $runcount -eq 0 ]; then
        echo Starting SSH Agent
        eval $(ssh-agent -s)
    fi
    

    如果没有加载至少 1 个密钥,则运行 ssh-add 并将密钥超时设置为 1 天:

    ssh-add -l &>/dev/null
    if ! [ "$?" == 0 ]; then
         echo Adding keys...
         ssh-add -t 1d
    fi
    
    • 7
  3. Erik Aronesty
    2018-08-02T11:40:58+08:002018-08-02T11:40:58+08:00

    一种替代方法是使用 Funtoo 的Keychain。然后你可以将这个单行代码粘贴到你的 bash shell 中:

    eval $(keychain --eval id_rsa)
    

    这做同样的事情(启动 ssh 代理等),同时也不为每个子 shell 运行 ssh-agent 进程。相反,它会查找您拥有的“已经运行”的实例并将您附加到它们。

    • 6
  4. Soheil
    2021-12-19T18:54:47+08:002021-12-19T18:54:47+08:00

    另外请记住,如果您有 ssh 连接保持活动,则需要在-A生效之前删除现有的连接文件。删除/tmp/[host].

    • 1

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • ubuntu apt-get upgrade - 如何在 shell 中单击确定?

  • VirtualBox 上 Ubuntu 的访客优化技巧 [关闭]

  • 外部硬盘上的 virtualbox 虚拟硬盘驱动器(Vista 主机上的 ubuntu 客户机)

  • 如何在 Ubuntu 上挂载 LVM 分区?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve