概述
最近遇到一些需要在Mac上写程序,然后在Raspberry Pi上调试的情况。以往的做法都是在Mac上将程序的框架搭好,然后通过SSH在Pi上新建文件,复制代码内容,保存后开始调试。如果遇到问题,则在Raspberry Pi上使用Nano编辑器打开并修改。
但这样做显然带来了两个问题,1.Mac和RPi上的程序不同步;2.在命令行中编辑程序时效率低下。
最近发现新的工作流程是,始终在Mac上编辑程序代码,保存后使用scp命令将文件上传到Raspberry Pi,然后再在终端的SSH中运行调试。由于scp是基于ssh的方式传输文件的,所以每次上传都需要输入密码。于是想到是否有一种方法可以使用无密方式登录Raspberry Pi。
SSH Key
分别将SSH Key的公钥和私钥放在Raspberry Pi上和本地,即可实现。
首先检查本地是否已经有生成过的秘钥对。
$ ls ~/.ssh
如果结果显示:
id_rsa id_rsa.pub known_hosts
前两个文件的存在说明本地已经有生成过秘钥对。
如果结果中没有id_rsa
文件和id_rsa.pub
文件,则说明本地还没有,使用如下命令生成:
$ ssh-keygen -t rsa -C coor@pi
该命令中的coor@pi
是这个秘钥的标记信息,coor
是我的名字,pi
是设备信息。
接下来会提示秘钥的保存地址,直接使用默认即可。
如果担心私钥被人复制后冒充你的身份进行访问,可以给秘钥设置一个密码。
秘钥生成后,再次检查~/.ssh
目录下的文件:
$ ls ~/.ssh
此时应该就有三个文件
id_rsa id_rsa.pub known_hosts
其中,id_rsa.pub是公钥,查看一下其中的内容:
$ cat ~/.ssh/id_rsa.pub
公钥应该是由一串复杂的字符组成,该段字符以ssh-rsa
开头,并以coor@pi
结尾。
将公钥复制到RPi
首先登录到Raspberry Pi,检查~/.ssh
目录下是否有一个名为authorized_keys
的文件,如果没有则建立该文件:
$ mkdir authorized_keys
有了该文件,返回到本地,使用如下命令将公钥复制到Raspberry Pi:
$ cat ~/.ssh/id_rsa.pub | ssh
@ 'cat >> .ssh/authorized_keys'
或者也可以使用scp命令复制:
$ scp ~/.ssh/id_rsa.pub
@ :.ssh/autorized_keys
执行该命令时需要输入登录Pi的密码,但只要复制完成,以后就可以直接ssh登录到Pi了。