由于工作中需要使用到很多部越狱手机,每部手机都需要ssh链接,而且都使用了usbmuxd
进行2222
映射22
端口,所以每当我换一部手机插上电脑使用ssh -p 2222 root@localhost
时,就会得到以下提示
这个提示的处理办法也很简单,就是去
.ssh
目录下打开known_hosts
文件将[localhost]:2222
这一条数据删除,然后再次登录,就会重新写入新设备的记录,就可以登录了。虽然说起来简单,步骤也没几个,但是经常要这样操作也挺烦人的,所以萌生了写一个自动清除脚本的想法。
这里我直接使用的shell
命令中的sed
命令来进行清除操作,很简洁,只有一行代码
sed -i "" '/localhost/d' /Users/xxxx/.ssh/known_hosts
代码的意思就是匹配known_hosts
文件中包含localhost
的那一行并将其删除,-i
参数是指直接修改原文件
注意
这里有个坑,就是-i
后面有个空的双引号""
,因为Mac
和普通的linux
的sed
命令有点不同,我在网上搜索出来的sed
命令都是直接sed -i '/需要匹配的字符串/d' 原文件
,但是这样直接在Mac
下运行会得到以下的提示
sed: 1: "known_hosts": invalid command code k
然后经过一番查找才知道,-i
后面需要添加一个字符串来备份源文件
例如下面这样写的话,就会生成一个known_hosts.bak
的备份文件
sed -i ".bak" '/localhost/d' known_hosts
由于我这里不需要备份,所以就直接写的是""
结合Alfred
虽然有了这一条命令,可以很省事的删除记录了,可以将此代码做成代码块,或者使用snippets
定义一个触发命令就可以了,但是但是但是,这还需要我先打开终端或者iTerm2
,然后才能执行这条命令,对于懒惰的程序员是不能忍的.所以我添加了个workflows
就这么的简单,然后快捷键调出
Alfred
输入cl
敲一下回车
右上角就提示清除成功,然后终端里继续登录吧!
???,突然想起来,我要登录肯定我是打开了终端的,既然我都打开了终端,为啥我不直接使用snippets
触发命令就可以了呢????
MDZZ