ssh-add重启后失效解决方法

2021/10/12

前言

这一篇中我说使用ssh-add可以把oss下发的私钥保存到高速缓冲区以后就再也不用输入了,经同事提醒和我的打脸实测..重启后就失效了…需要重新操作。

同事说他们每次都是把私钥对应的密码放在笔记中每次重启以后ssh-add执行一下,然后把私钥的密码拷进入验证一下,我听完流泪了,这是程序员解决的方式吗。肯定有办法解决做到一劳永逸,于是有有了这一篇研究的文章。

研究开始

查询手册得知,ssh-add其实是把私钥放到高速缓存中

image-20211012221306156

linux手册


每次ssh鉴权的时候只要指定了这个私钥就可以快速验证,既然重启失效,那么肯定这个高速缓存储存介质是内存石锤了。

思路有两个,第一个就是这个私钥反正已经在本地了,能不能有一个方法不需要添加到高速缓存里面。第二个就是既然断电失效,那有没有办法每次开机的时候自动加载一下。那么朝着这两个思路,摸索到了两个解决办法

注意我的私钥是有密码的,所以我的步骤会一个准备,如果你的私钥没有密码,那么恭喜你,你可以跳过准备

准备

我的最初思路是开机执行添加ssh-add的命令,但是我的需要输入密码,这就很蛋疼了,我找了很多方式都没有办法让密码自动流入ssh-add中,比如我们经常使用的sudo xxx。后面也要接密码,但是只要不介意让密码明文是有办法合并到一行并且自动执行的。

但是我在ssh-add的手册中看到,ssh-add有一个参数可以把密码添加到钥匙串以后只需要ssh-add就可以啦

image-20211012223627698

-K 的参数

于是我们先执行一遍

image-20211012223830881

执行一遍带-K参数的命令,把私钥放到mac的钥匙串中

image-20211012224145308

添加后可以在mac的钥匙串中看到


然后我们第二次在使用ssh-add -K xxx 添加以后,它就不会需要我们输入密码了(注意,使用的时候也必须带-K,不然默认不会去钥匙串里面取密码,还是提示需要你输入)

image-20211012224733603

第二次输入的时候已经自动从钥匙串取密码了

方法一(使用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(输入自己私钥的位置)

image-20211012225356180

准备操作.zshrc文件

image-20211012225312468

添加ssh-add命令


记得:wq保存,然后我们打开一个窗口试验一下

2021-10-12 22.56.06

可以看到,我打开一个窗口这个添加成功的信息就出来了,我每次打开窗口都会自动add一下更别说重启啦。最后有强迫症的我,自然是希望无感的,不希望他每次都提示我添加成功。那么我们把换成在这个nohup ssh-add -K ~/.ssh/oreoft >/dev/null 2>&1。就是前后加一下nohup>/dev/null 2>&1。作用是把输出的日志丢到”黑洞”里面

image-20211012225911947

每次开窗口不显示成功日志修改

方法二(开机自动执行)

上面的方法比较简单,比较linux风格一点。那么下一个比较mac风格,因为这个私钥在高速缓存中只是重启以后才失效,我们每次打开窗口都重新加载一下,比较冗余并且大家可以看到我打开一个新终端稍微会慢一点,牺牲了一点性能,就为了重启的一次丢失导致每次打开终端都需要add,这不是一个很好地设计。最小性能牺牲应该是开机执行一遍,centos有用/etc/rc.d/rc.local,mac下没有对应的文件,但是它有一个GUI的软件可以供你设置。那就是自动操作。

  1. 我们先cmd+space然后输入自动操作

image-20211012230750295

  1. 在弹出来的框框选择新建文稿

image-20211012230922155

  1. 在又弹出来的框框里面选择应用程序

image-20211012230945870

  1. 然后输入shell,并且选择shell

image-20211012231058700

  1. 在里面输入ssh-add -K ~/.ssh/oreoft(注意自己的路径,然后需要带-k),然后按右上角的三角形,执行一遍,看是否能通过(如果提示你输入密码,检查命令是否带-K,或者是否已经把密码添加到钥匙串了)

image-20211012231240551

  1. 然后cmd+s保存,选择一个地方保存起来

image-20211012231545450

这是我保存的地方


  1. 右上角小苹果-系统偏好设置-用户与群组-登陆项

image-20211012231652258

  1. 选择小加号,然后把刚刚你设置的脚本添加到这里,这里就类似于win的开机自启项,选择隐藏,这样它每次开机后台启动,对你无感知。

image-20211012231808360

后言

最终优雅的解决了这个问题,对于我而言,每次开机都要ssh-add。我是接受不了…因为我很懒,其实整个思路很简单,因为我的私钥是带密码的,所以我使用ssh-add -K的-K参数命令进行添加,然后我mac的app自动操作加上开机自启项来解决每次自动ssh-add -K的问题。

(转载本站文章请注明作者和出处 没有气的汽水



┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐
├ 文章已经完啦, 想要第一时间收到文章更新可以关注↓ ┤
└┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┴┘

Post Directory






下面是评论区,欢迎大家留言探讨或者指出错误哈