点击
搜索 / Search

一个月前刚换了全套机器密钥,关于 XShell 的问题就不鞭尸了。毕竟在 Windows 上,体验还算说得过去而且又支持 tabs 的终端工具也就这几个。但是为了避免过一个月再报告“我又换了新密钥”这种尴尬的事情,我决定还是把工具链切到 GNU 那一套去。备选方案有两套:putty 和 ssh over Git bash。原生方案自然是 WSL,但是我看了一下固态硬盘的剩余容量……等到十月重装系统之后再说吧。记录一下这两套方案怎么配置的。

两套方案本身都没有多标签页支持,所以选择用 ConEmu 做外壳。先说 putty 的方案,服务器连接好办,不过想要让 putty 在标签页里运行,建立任务的时候不能直接写putty.exe -new_console -load "xxxx",需要借助plink.exe,可以这么写:

plink.exe -new_console -load "xxxx"

记得在使用前将 putty 所在的文件夹注册到 ConEmu 的变量路径里,或者直接把 putty 扔到 ConEmu 的/plugin/文件夹中。关于 ConEmu 的设置就不写了。

putty in tabs

在我向某舰 C 群问完“为什么不能在标签页里运行 putty?”之后,有 dalao 表示困惑:“你都有 Git bash 了,为什么不直接用 OpenSSH 呢?”起初我以懒拒绝了他们的建议,然后还是翻开手册,接受了这个意见。写 config 确实挺方便的啊……这个方案里存在几个需要优化的地方,首先是 keepalive。总会有莫名其妙就断线的时候,配置一下 openssh 就好:

ClientAliveInterval 30

把这行加到~/.ssh/config里。这三句表示每隔 30 秒发一次心跳包确认连接是否正常。当然具体数值可以自己改,可以针对不同服务器选择适当的间隔。下一步就是缓存密钥密码了,参考 StackOverflow 的做法,在~/.profile里加一段命令:

declare -x SSH_ENV="$HOME/.ssh/environment"

# start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."
    # spawn ssh-agent
    ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
    echo succeeded
    chmod 600 "$SSH_ENV"
    . "$SSH_ENV" > /dev/null
    ssh-add
}

# test for identities
function test_identities {
    # test whether standard identities have been added to the agent already
    ssh-add -l | grep "The agent has no identities" > /dev/null
    if [ $? -eq 0 ]; then
        ssh-add
        # $SSH_AUTH_SOCK broken so we start a new proper agent
        if [ $? -eq 2 ];then
            start_agent
        fi
    fi
}

# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
    ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
  test_identities
    fi
else
    if [ -f "$SSH_ENV" ]; then
    . "$SSH_ENV" > /dev/null
    fi
    ps -f -u $USERNAME | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
    if [ $? -eq 0 ]; then
        test_identities
    else
        start_agent
    fi
fi

如果遇到权限问题,请chmod 600 ~/.ssh/config。这样每次启动的时候会自动添加密钥并提示你输入密码解密,如果你自己的密钥没放在~/.ssh/下的话可以自己运行ssh-add添加。putty 那边的话可以用pageant.exe完成这个功能,就不多讲了。

preview

效果就是这样,这个月的壁纸是 polygon。

参考资料:

  1. https://stackoverflow.com/questions/3669001/getting-ssh-agent-to-work-with-git-run-from-windows-command-shell/
  2. https://www.liaohuqiu.net/cn/posts/keep-alive-terminal-connection/
  3. http://einverne.github.io/post/2017/05/ssh-keep-alive.html
  4. http://gohom.win/2015/09/20/ConEMU/
声明: 本站所有图文遵循 署名-非商业性使用-相同方式共享 3.0 共享 协议.
转载请注明转自 ershiwo的私人研究所
标签:

16 Comments

  1. 学不来学不来。

    2017.09.16 at 10:12
    #1  
  2. 突然发现 putty 的 knows_hosts 是写在注册表的,系统重灌了所有保存的伺服器全丢了,输的透彻。

    2017.09.16 at 10:26
    #2  
    • 想办法切换啊。

      2017.09.16 at 12:49
      #21
      • 最绝的是我把当时的注册表系统从备份里拉出来加载发现根本没有 known_hosts 被保存下来。很神秘。那么我的 known_hosts 被保存到了哪里?

        2017.09.16 at 12:51
        #22
        • HKEY_CURRENT_USER\Software\SimonTatham
          打开有真相。

          2017.09.16 at 13:04
          #23
          • 那么这个 hive 到底放在了哪里?我电脑似乎没有 \winnt\profiles\username 这个路径啊

            2017.09.16 at 15:23
            #24
            • 终于找到了
              %USERPROFILE%\Ntuser.dat – HKEY_USERS\ (linked to by HKEY_CURRENT_USER)

              从备份文件里还原此文件到临时目录,然后用 regedt32 load 这个 hive,然后用 Registry Workshop 复制 HKEY_USERS\test\Software\SimonTatham 到 \HKEY_CURRENT_USER\Software\ 下就行了

              2017.09.16 at 15:57
              #25
              • 所以你直接进注册表找不就完了 :em09:

                2017.09.16 at 16:09
                #26
                • 讲道理我系统重灌了,注册表没这个信息了。这是从系统备份中挖出来 registry hive 来恢复的。同样的方法可以用在任意应用程序,也就是说就算程序装在了非系统盘,系统重灌后依然能恢复应用的配置。

                  2017.09.16 at 16:40
                  #27
                  • 原来如此。HKCU 确实是存在 %USERPROFILE%/Ntuser.dat 里的,其他注册表项可以到 system32 里找。
                    顺便问一下 DKIM 多久生效?

                    2017.09.16 at 16:47
                    #28
                    • 实时的,更改之后再执行 PuTTY 就已经能看到保存的数据了。

                      2017.09.16 at 20:17
                      #29
                      • 给你一个机会再想想。
                        我问的是邮件 DKIM 签名。

                        2017.09.16 at 20:53
                        #210
  3. frank1998sj

    可以考虑一换换全套,干脆用平铺式窗口管理器,就再也没有这样的烦恼了(望天

    2017.09.24 at 22:22
    #3  
    • 等我淘回个新机器再说。

      2017.09.24 at 22:24
      #31