树莓派我爱编程玩转树莓派

[玩转树莓派] 0x02 吊炸天的远程控制

2016-04-01  本文已影响2648人  ttdevs

[TOC]

[玩转树莓派] 吊炸天的远程控制

Connect to Raspberry Pi

安装好了系统,接下来我们就可以开始操作 Raspberry Pi 了。如果你不是拿来做家庭媒体中心,看视频之类,我们完全不需要给 Raspberry Pi 配置显示器,通过远程连接工具就可以完成我们所有的日常操作。由于连接显示器操作比较直观,这里仅给大家介绍无显示器的远程操作方法。

0x01 SSH

先看一段介绍,来自维基百科

Secure Shell(缩写为SSH),由IETF的网络工作小组(Network Working Group)所制定;SSH为一项创建在应用层和传输层基础上的安全协议,为计算机上的Shell(壳层)提供安全的传输和使用环境。
传统的网络服务程序,如rsh、FTP、POP和Telnet其本质上都是不安全的;因为它们在网络上用明文传送数据、用户帐号和用户口令,很容易受到中间人(man-in-the-middle)攻击方式的攻击。就是存在另一个人或者一台机器冒充真正的服务器接收用户传给服务器的数据,然后再冒充用户把数据传给真正的服务器。
而SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用SSH协议可以有效防止远程管理过程中的信息泄露问题。通过SSH可以对所有传输的数据进行加密,也能够防止DNS欺骗和IP欺骗。
SSH之另一项优点为其传输的数据可以是经过压缩的,所以可以加快传输的速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、POP、甚至为PPP提供一个安全的“通道”。

上面的介绍是不是太抽象~~还是我来说吧。折腾 Raspberry Pi ,ssh作为一个重要的远程连接工具(或者理解为把 Raspberry Pi 的终端拿到本地来),日常操作中是必不可少的!在没有显示器的情况下,我们可以使用ssh完成绝大多数(甚至所有的)操作。因此,这里我必须着重介绍。我们装的 Raspbian 系统默认是打开ssh的(否则在没有显示器的情况下我们是无法操作的,当然你非得说用USB转TTL也行),因此,我们不需要做任何配置就可以直接使用ssh。

安装SSH

Windows系统推荐使用免费、小巧、无需安装、并且功能强大的ssh工具。

PuTTY 是一个Telnet、SSH、rlogin、纯TCP以及串行接口连接软件。

大家可以到他的官网下载,或者到这里下载,非常小,519KB。打开是界面如下:

PuTTY

使用也是非常的简单,在 Host Name(or IP address) 中填入你的域名或者IP,在 Port 中填入你的端口,默认是 22 (如果你修改了默认端口,在此改成新的端口即可),然后点击 Open 就开始连接,打开一个 terminal ,按照提示操作即可:

PuTTY login

Mac和Linux系统中默认已经安装了 ssh 工具,我们可以直接在命令行中操作即可:

➜  ~ ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8
➜  ~ ssh
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
           [-D [bind_address:]port] [-E log_file] [-e escape_char]
           [-F configfile] [-I pkcs11] [-i identity_file]
           [-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
           [-O ctl_cmd] [-o option] [-p port]
           [-Q cipher | cipher-auth | mac | kex | key]
           [-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
           [-w local_tun[:remote_tun]] [user@]hostname [command]
➜  ~

使用SSH

ssh的使用比较简单,直接在我们本地的终端中输入 ssh pi@<your domain or ip> 命令,按照提示输入密码即可:

➜  ~ ssh pi@ttdevs.com
pi@ttdevs.com's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Thu Mar 31 17:38:44 2016 from 58.11.22.33
pi@raspberry:~ $

完成ssh的登录,你就可以在本地直接操作 Raspberry Pi 了,而且体验和直接登录 Raspberry Pi 操作一样。

修改端口号

如果你跟我一样比较悲催——22端口 也 被电信封了(或者很不稳定),那你就需要给ssh换(或者增加)一个端口。如何判断22端口是否被封了?最简单就是如果你在内网通过ssh可以访问Raspberry Pi,外网却访问不了,那么22端口就有可能被运营商或者你的防火墙给封了。既然端口有问题,那最简单的办法换个端口,就可以规避这个问题,下面介绍如何操作:

无密码登录

无密码登录就是把我们从每次登录 Raspberry Pi 都需要输入密码的繁琐中解脱出来。配置完成后,我们只需要 ssh <your domain or ip> 即可登录我们的设备而不需要输入密码。

这个配置很简单,只需要将我们的public秘钥传到Raspberry Pi的 ~/.ssh/authorized_keys 文件中即可。执行下面的命令(假设你的本地已经生成了相关的key):

cat ~/.ssh/id_rsa.pub | ssh <username>@<ip-address or domain> 'cat >> .ssh/authorized_keys'

其中id_rsa.pub为你的公钥。如果没有问题,当你再次尝试使用ssh登录的话就不需要密码了。如果有问题,请参考这里

0x02 VNC

虽然ssh可以完成我们的绝大多说操作。但是如果习惯了图形界面的你,一时半会很难上手这种命令行方式,会想有个桌面操作环境,那接下来我们介绍下VNC,因为他可以满足你对GUI的要求。VNC的配置,我们可以在如下 Raspberry Pi 官方文档中找到。当然,你也可以到VNC的官方网站查看。

安装VNC

配置VNC自启动

通过上面的配置我们就可以使用VNC了,但是如果我们重新启动设备,之前的配置失效,VNC就连不上了。因此最好能把启动VNC的操作添加到系统的自启动项中。具体操作如下:

密码管理

VNC的密码管理比较简单,详细描述可以参考这里,下面做简单描述:

  1. 修改密码 vncpasswd

    pi@raspberrypi:~ $ vncpasswd
    Using password file /home/pi/.vnc/passwd
    Password:
    Verify:
    Would you like to enter a view-only password (y/n)? y
    Password:
    Warning: password truncated to the length of 8.
    Verify:
    pi@raspberrypi:~ $
    

    PS:设置新的密码,好像并不会验证你的旧密码

  2. 忘记密码

    VNC的密码文件存储在:$HOME/.vnc/passwd中,如果你忘记了VNC的密码,可以直接删除这个文件,运行 tightvncserver 即可使用新的密码。

其他说明

0x03 SCP

讲过上面的配置之后我们就可以通过这两种方式来远程操作我们的树莓派了。但是,有时候我们需要在本地和 Raspberry Pi 之间进行文件拷贝,这里我们可以有很多种选择,比如常见的FTP,SFTP等。但是由于FTP的配置比较麻烦,而且必须以服务的方式在系统常驻,因此给大家推荐 SCP。SCP 是secure copy的简写,用于在Linux下进行远程拷贝文件。我们比较常见的 cp 命令和 scp 类似,不过cp 只是在本机进行拷贝,不能跨服务器。考虑网络传输的安全性, scp 传输是加密的。默认情况,我们的Raspberry Pi 已经安装了SCP, 可以通过直接在终端输入 scp 来查看,如:

$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

由于我用的是Mac系统,默认情况也已经安装了SCP命令。如果你使用的是Windows系统,我们可以到这里下载WinSCP

0x04 HTTP

为什么会提到这个呢?原因很简单,在接下来的学习中大部分的编码操作都会使用python来完成。所以我们会安装python语言,而且,默认情况我们的Raspberry Pi已经安装了python 2.7版本。python2 中默认包含了SimpleHTTPServer这个库。因此我们可以直接拿来使用。说了这么多你还不知道这个东东是干嘛的。其实从名字中我们就可以看出来,他是一个http server。既然是http server,那么我们就可以用来作为下载文件服务来使用,间接完成文件的拷贝。我们可以通过如下的命令来启动一个http服务:

~ $ python -m SimpleHTTPServer 8088
Serving HTTP on 0.0.0.0 port 8088 ...
...

如果你想使用80端口(请确保没有被运营商封掉),请将8088改成80,sudo python -m SimpleHTTPServer 80。启动好之后我们就可以在浏览器中通过打开 http://<your ip or domain>:8088 这样的方式来访问启动服务时那个位置下的所有文件。如果你想从Raspberry Pi中拷贝文件到本地,那就在 Raspberry Pi 中启动服务,如果你想把本地文件拷贝到Raspberry Pi中,在我们本地启动服务即可。

Raspberry Pi Python Http

至此,我们可以真正开始Raspberry Pi 操作了~~

Create by ttdevsCreate by ttdevs
上一篇 下一篇

猜你喜欢

热点阅读