一个月前刚换了全套机器密钥,关于 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 的设置就不写了。
在我向某舰 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
完成这个功能,就不多讲了。
效果就是这样,这个月的壁纸是 polygon。
参考资料:
学不来学不来。
突然发现 putty 的 knows_hosts 是写在注册表的,系统重灌了所有保存的伺服器全丢了,输的透彻。
想办法切换啊。
最绝的是我把当时的注册表系统从备份里拉出来加载发现根本没有 known_hosts 被保存下来。很神秘。那么我的 known_hosts 被保存到了哪里?
HKEY_CURRENT_USER\Software\SimonTatham
打开有真相。
那么这个 hive 到底放在了哪里?我电脑似乎没有 \winnt\profiles\username 这个路径啊
终于找到了
%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\ 下就行了
所以你直接进注册表找不就完了
讲道理我系统重灌了,注册表没这个信息了。这是从系统备份中挖出来 registry hive 来恢复的。同样的方法可以用在任意应用程序,也就是说就算程序装在了非系统盘,系统重灌后依然能恢复应用的配置。
原来如此。HKCU 确实是存在 %USERPROFILE%/Ntuser.dat 里的,其他注册表项可以到 system32 里找。
顺便问一下 DKIM 多久生效?
实时的,更改之后再执行 PuTTY 就已经能看到保存的数据了。
给你一个机会再想想。我问的是邮件 DKIM 签名。
最多 72 hr
那我再等等(
可以考虑一换换全套,干脆用平铺式窗口管理器,就再也没有这样的烦恼了(望天
等我淘回个新机器再说。