前言
在这一篇中我说使用ssh-add可以把oss下发的私钥保存到高速缓冲区以后就再也不用输入了,经同事提醒和我的打脸实测..重启后就失效了…需要重新操作。
同事说他们每次都是把私钥对应的密码放在笔记中每次重启以后ssh-add执行一下,然后把私钥的密码拷进入验证一下,我听完流泪了,这是程序员解决的方式吗。肯定有办法解决做到一劳永逸,于是有有了这一篇研究的文章。
研究开始
查询手册得知,ssh-add其实是把私钥放到高速缓存中
每次ssh鉴权的时候只要指定了这个私钥就可以快速验证,既然重启失效,那么肯定这个高速缓存储存介质是内存石锤了。
思路有两个,第一个就是这个私钥反正已经在本地了,能不能有一个方法不需要添加到高速缓存里面。第二个就是既然断电失效,那有没有办法每次开机的时候自动加载一下。那么朝着这两个思路,摸索到了两个解决办法。
注意我的私钥是有密码的,所以我的步骤会一个准备,如果你的私钥没有密码,那么恭喜你,你可以跳过准备
准备
我的最初思路是开机执行添加ssh-add的命令,但是我的需要输入密码,这就很蛋疼了,我找了很多方式都没有办法让密码自动流入ssh-add中,比如我们经常使用的sudo xxx。后面也要接密码,但是只要不介意让密码明文是有办法合并到一行并且自动执行的。
但是我在ssh-add的手册中看到,ssh-add
有一个参数可以把密码添加到钥匙串以后只需要ssh-add就可以啦
于是我们先执行一遍
然后我们第二次在使用ssh-add -K xxx
添加以后,它就不会需要我们输入密码了(注意,使用的时候也必须带-K,不然默认不会去钥匙串里面取密码,还是提示需要你输入)
方法一(使用startup文件)
还记得startup文件吗点击这里回忆](https://www.someget.cn/linux/2021/02/15/linux_evnFile.html)。每开一个终端zsh都会去加载并且执行startup文件,意思就是我们只需要在startup文件文件中加入ssh-add -K xx
的命令那么不用我们每次去执行,每次都会执行无惧重启。
这里我选的startup是.zshrc,在终端输入vim ~/.zshrc
,然后在里面添加ssh-add -K ~/.ssh/oreoft
(输入自己私钥的位置)
记得:wq保存,然后我们打开一个窗口试验一下
可以看到,我打开一个窗口这个添加成功的信息就出来了,我每次打开窗口都会自动add一下更别说重启啦。最后有强迫症的我,自然是希望无感的,不希望他每次都提示我添加成功。那么我们把换成在这个nohup ssh-add -K ~/.ssh/oreoft >/dev/null 2>&1
。就是前后加一下nohup
和>/dev/null 2>&1
。作用是把输出的日志丢到”黑洞”里面
方法二(开机自动执行)
上面的方法比较简单,比较linux风格一点。那么下一个比较mac风格,因为这个私钥在高速缓存中只是重启以后才失效,我们每次打开窗口都重新加载一下,比较冗余并且大家可以看到我打开一个新终端稍微会慢一点,牺牲了一点性能,就为了重启的一次丢失导致每次打开终端都需要add,这不是一个很好地设计。最小性能牺牲应该是开机执行一遍,centos有用/etc/rc.d/rc.local
,mac下没有对应的文件,但是它有一个GUI的软件可以供你设置。那就是自动操作。
- 我们先cmd+space然后输入自动操作
- 在弹出来的框框选择新建文稿
- 在又弹出来的框框里面选择应用程序
- 然后输入shell,并且选择shell
- 在里面输入
ssh-add -K ~/.ssh/oreoft
(注意自己的路径,然后需要带-k),然后按右上角的三角形,执行一遍,看是否能通过(如果提示你输入密码,检查命令是否带-K,或者是否已经把密码添加到钥匙串了)
- 然后cmd+s保存,选择一个地方保存起来
- 右上角小苹果-系统偏好设置-用户与群组-登陆项
- 选择小加号,然后把刚刚你设置的脚本添加到这里,这里就类似于win的开机自启项,选择隐藏,这样它每次开机后台启动,对你无感知。
后言
最终优雅的解决了这个问题,对于我而言,每次开机都要ssh-add
。我是接受不了…因为我很懒,其实整个思路很简单,因为我的私钥是带密码的,所以我使用ssh-add -K
的-K参数命令进行添加,然后我mac的app自动操作加上开机自启项来解决每次自动ssh-add -K
的问题。
(转载本站文章请注明作者和出处 没有气的汽水)
┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ ├ 文章已经完啦, 想要第一时间收到文章更新可以关注↓ ┤ └┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘
Post Directory
下面是评论区,欢迎大家留言探讨或者指出错误哈