从零配置 SSH 公钥:树莓派、嵌入式设备与 GitHub 的免密登录
前言
相信其实大家对HTTPS协议网络了解比较深入,并且多多少少也感受到了它的一些不方便之处
我另外写了一篇SSH的工作原理,可以作为预备知识,不过对这篇文章的工作流没有影响,可以放心食用
接下来会围绕基本如何部署来展开
首先,前提是你的设备支持使用ssh进行登录,也就是可以:
ssh asumi@192.168.2.212
连接后输入用户密码就可以登录shell
我们接下来的操作是通过部署公钥来为后续免密登录
部署ssh公钥
为电脑生成公钥
ssh-keygen -t rsa
这是生成的rsa公钥,也可以生成椭圆曲线公钥
相关文件默认保存在了 C:\Users\你的用户名\.ssh\
将公钥发送到树莓派
有两种方法:直接发送文件或者复制内容后粘贴到指定文件
先来方法一:粘贴内容,这也是比较底层和保险的做法
用记事本打开Windows生成的公钥文件 C:\Users\你的用户名\.ssh\id_rsa.pub,复制里面的全部内容
在树莓派上:
- 输入
mkdir -p ~/.ssh确保文件夹存在 - 输入
nano ~/.ssh/authorized_keys - 把刚才复制的内容粘贴进去
- 按
Ctrl+O保存,Ctrl+X退出 - 设置权限
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
再来方法二(其实我没尝试过)
type $env:USERPROFILE\.ssh\id_rsa.pub | ssh <用户名>@<IP> "cat >> ~/.ssh/authorized_keys"
反正gemini说可以,我就写上去了(笑)
部署ssh公钥到别的地方
用相似的方法,也可以把公钥部署到别的设备,比如我的linux词典笔上
但是因为我的词典笔没有nano,所以有两种解决办法:vim或者echo
在PC上确认公钥:(id_xxx.pub 常见为id_ed25519.pub、id_rsa.pub)
ls $env:USERPROFILE\.ssh
type $env:USERPROFILE\.ssh\id_xxx.pub
复制整行信息到剪切板
在词典笔上,先挂载系统分区为读写
mount -o remount,rw /
然后使用更通用的echo
echo '......你的公钥......' >> /root/.ssh/authorized_keys
- 外面用单引号,防止 shell 展开
- 必须是一整行,中间不要换行
- 用 »,避免覆盖已有 key
给文件设置权限:
chmod 600 /root/.ssh/authorized_keys
检查是否写对:
ls -ld /root/.ssh
ls -l /root/.ssh/authorized_keys
cat /root/.ssh/authorized_keys
测试连接:
新开一个cmd终端(不要关掉这个)
ssh root@192.168.2.25 <--这个是ip地址
为github配置ssh
还是照样拿到你的密钥文件内容(一整行)
这次我们生成椭圆曲线密钥
ssh-keygen -t ed25519 -C "you@example.com"
后面的参数可以写自己想要写的名字
type $env:USERPROFILE\.ssh\id_ed25519.pub
将一整行复制到剪切板
打开github,在上面添加公钥:GitHub → Settings → SSH and GPG keys → New SSH key → 粘贴并保存
测试ssh是否可用
ssh -T git@github.com
看到 Hi xxx! You've successfully authenticated, but GitHub does not provide shell access. 即正常
使用ssh连接仓库
- 克隆的时候用:
git clone git@github.com:用户名/仓库名.git - 已经有 HTTPS 仓库,改成 SSH:
git remote set-url origin git@github.com:用户名/仓库名.git - URL重做
git config --global url."git@github.com:".insteadOf "https://github.com/"也就是让以后输入HTTPS网址也会重定向到SSH地址
结语
至此,我们就学会了怎样在设备B上部署设备A的公钥的工作流了
以后也可以用类似的方法来部署自己的公钥
接下来,无论是树莓派、词典笔还是github,都可以用SSH非常非常方便地远程管理!真是可喜可贺!
那么以后也请多多关照
留下评论