可能是我写录的树莓派系统image有问题吧,小伙伴都说默认应该是打开22端口,支持ssh的;但是我做的几张SD卡的系统都是不打开的,我很纳闷,怀疑用的是假的镜像吧。前几次都发生在实验室,显示器,HDMI线应有尽有,启动系统,简单地通过界面在系统的 Preferences 中开启ssh端口即可。然而这一次,发生在家里(因为之前一直没空写个关于树莓派外置无线网卡驱动安装的教程,想着利用寒假回家弄一弄),家里哪有实验室那么好的环境,所以,甭想通过界面操作开启。
那究竟能不能通过直接修改SD卡里面的image文件内容,不用UI的方式,开启ssh端口呢?通过下面的捣鼓发现,这是可行的。
SD卡里面就保存着树莓派系统
SD卡里面有两个分区,系统文件保存在非 boot 分区中,如下图:
/usr/bin/raspi-config 就是树莓派Preferences操作对应的配置文件,我们用编辑器(Sublime-Text)打开该文件,CTRL+F 找到与 ssh 配置相关的部分,即下图显示的 do_ssh()。通过enable和start字段可以推测,该部分的两条命令应该是对应于界面操作里面勾选启用ssh对应的操作,通过这两条命令,应该可以开启系统的ssh端口!
将开启端口命令自启动
我的想法是,要不让这两条命令开机启动吧,看看上一步的猜测是不是真的有效。/etc/rc.local 是配置系统自启动的文件,我们将与开启ssh端口相关的两条命令添加到 exit 0 之前,如下图所示。
nmap来检测
上面的操作真的能得偿所愿吗?我们需要验证一下,看能否ssh进去已经启动的树莓派系统。然而问题又来了,树莓派的ip是哪一个呀?很不幸,我的树莓派是插在小米3路由器,笔记本连着小米3路由器的无线网络,不过,小米3路由器是通过无线桥接到一个信号还不错,通过WiFi万能钥匙 破解出密码的不知道是邻居哪家里面的网。无线桥接,DHCP全都由桥接的路由器管理,小弟不才,撞不出人家的管理密码。咋办呢?这里介绍一个强大的工具,nmap。
通过下面的命令可以扫描出局域网内所有的ip地址(进行ping扫描,打印出对扫描做出响应的主机,这里通过笔记本的ip可以知道整个局域网是192.168.1.0网段)。
1 | nmap -sP 192.168.1.0/24 |
然后,把树莓派一拔一插,对比前后两次打印的ip地址列表的情况,就能找出树莓派的ip地址了。
也可以通过 nmap 命令查看一台主机开放了哪些端口,如下图。
树莓派确实把ssh端口开放了,直接ssh也能够顺利进入树莓派系统,问题解决了。
还原自启动,即可大功告成
有必要每次系统启动都去开放 ssh 端口吗?可能没这个必要,因为经过两条命令的操作后,应该会修改系统的一些变量或者状态位,这些操作应该不是掉电还原的,否则,在第一节中,关闭ssh端口就不需要额外的两条命令了吧。我们不妨再试试。
既可以直接在起来的系统中将自启动文件 /etc/rc.local 还原,当然也可以像第一节中那样,还是对SD卡的内容进行修改。
还原rc.local,再把SD卡插回去或者reboot系统,还是能够顺利通过ssh进入树莓派系统的,大功告成。