FANG KE (Coor)

Always Seeking an Adventure.

无密码SSH登录Raspberry Pi

Sat 19 May 2018

概述

最近遇到一些需要在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了。