技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 系统运维 --> SSH Agent与GNU Screen的兼容问题

SSH Agent与GNU Screen的兼容问题

浏览:1797次  出处信息

    关于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. Linux shell脚本使用while循环执行ssh的注意事项    (阅读:6401)
    2. 在ssh服务里使用chroot    (阅读:4699)
    3. 为什么要用公钥/私钥而不是密码去做SSH身份验证    (阅读:4532)
    4. 懒人连ssh不输密码若干大法    (阅读:4360)
    5. ssh连接超时解决办法    (阅读:4323)
    6. 如何让ssh登录更加安全    (阅读:4333)
    7. ssh命令    (阅读:4061)
    8. SSH无密码登录    (阅读:4055)
    9. 共享会话的ssh连接配置    (阅读:3431)
    10. 收集几个手机浏览器的User-agent    (阅读:3366)
    QQ技术交流群:445447336,欢迎加入!
    扫一扫订阅我的微信号:IT技术博客大学习
    © 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

    京ICP备15002552号-1