IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

SSH Agent与GNU Screen的兼容问题

将之典藏 2011-09-19 23:26:05 累计浏览 2,825 次
本机暂存

    关于SSH Agent的使用可以见《SSH免密码认证进阶使用》一文,与GNU Screen之间会有这样一个问题:

  • 在客户端运行ssh-agent并启用agent转发;
  • 通过SSH登入服务器,服务器端会在临时文件夹生成auth socks文件A,并将A的路径写入环境变量SSH_AUTH_SOCK;
  • 运行”screen”进入到GNU screen, screen会继承环境变量,读入环境变量SSH_AUTH_SOCK;
  • 将screen会话挂起,退出服务器,这时socks文件A将会被销毁;
  • 再一次通过SSH登入服务器,服务器会生成新的auth sock文件B;
  • 恢复screen会话,但是由于恢复screen时不会再刷新环境变量,SSH_AUTH_SOCK的值仍然是A,但是socks文件A却早就被移除掉了,ssh-agent也就失去作用;
  •     我目前的做法是,在.bashrc增加一段代码,每次在进入bash shell时会建立一个软连接指向当时的auth socks文件,然后将SSH_AUTH_SOCK环境变量的值设置为软连接的地址,问题得以解决:

    agent_file=/tmp/ssh-agent-$USER.sock
    
    if [ "$SSH_TTY" -a "$SSH_AUTH_SOCK" -a "$SSH_AUTH_SOCK" != $agent_file ]; then
        ln -sfn $SSH_AUTH_SOCK $agent_file
        export SSH_AUTH_SOCK=$agent_file
    fi
    
    # 同时增加了一个函数,方便重建软连接,有些情况下用得着。
    update_ssh_agent() {
        for sock in /tmp/ssh-*/agent*
        do
            if [ -S $sock ]; then
                ln -sfn $sock $agent_file
            fi
        done
    }

    同分类推荐文章

    1. 从零重建 macOS 开发机:可复现的环境初始化流程 (2026-06-14 20:36:00)
    2. 百度物理网络监控工具开源第二弹:毫秒级监控工具 baize,让你的网络问题无处遁形 (2026-06-11 08:10:28)
    3. How to Set Up Homebrew Tap for Private CLI Tools: A Complete Guide (2026-05-27 02:13:03)

    查看更多 DevOps 文章 →

    建议继续学习

    1. 高效Linux用户需要了解的命令行技能 (累计阅读 12,825)
    2. linux 建立两台机器的信任关系 (累计阅读 11,484)
    3. sshd+chrome+switchsharp翻墙 (累计阅读 8,787)
    4. Linux shell脚本使用while循环执行ssh的注意事项 (累计阅读 8,189)
    5. Mac下使用SecureCRT的一些记录 (累计阅读 7,872)
    6. SecureCRT for Mac OS X 6.7.3破解方法 (累计阅读 6,811)
    7. 在ssh服务里使用chroot (累计阅读 5,957)
    8. 为什么要用公钥/私钥而不是密码去做SSH身份验证 (累计阅读 5,790)
    9. 如何让ssh登录更加安全 (累计阅读 5,712)
    10. ssh连接超时解决办法 (累计阅读 5,627)