在 Linux 上使用安全外壳 (SSH) 进行登录并使用安全副本 (SCP) 进行数据传输
SSH 代表安全外壳。它是一种加密的远程登录协议。一旦在每个节点上设置好它,它就可以用来与该网络中的其他各种节点进行通信。
SSH 的主要优点是:
- SSH使用RSA加密算法生成公钥和私钥,入侵极其困难。
- 由于 SSH 是一种远程登录协议,因此可以在笔记本电脑上进行配置。这意味着您可以使用笔记本电脑无线连接到 Raspberry Pi 集群。
- 由于 SCP(安全复制)和 SFTP(安全文件传输协议)等协议在 SSH 之上运行,您可以使用它们将文件和文件夹直接从一个节点传输到另一个节点。
- SSH 支持一次登录。这意味着您只需在第一次登录时输入凭据。从第二次登录开始,就不再需要了。
让我们从生成 SSH 密钥开始。对于要使用的 SSH,应该在两个或多个节点之间生成密钥,以便可以进行数据传输。我们使用 RSA 进行加密。请注意,在一个节点上,我们生成密钥,它将拥有私钥或秘密密钥。同一节点还将生成一个公钥,该公钥将发送给希望向该节点发送数据的其他节点。在您希望从中发送数据的节点上执行以下命令。我将此节点称为“主节点”,将其他节点称为“工作节点”。
cd ~
ssh-keygen --t rsa --C ""
这两个命令设置了默认位置 /home/pi/_ssh/id_rsa 来存储密钥。
如果要求输入密码,请将密码留空。一旦完成,下一步就是将公钥发送到工作节点。因此,请确保您已将工作节点连接到网络。现在我们可以在工作节点上设置加密密钥,因此使用的 IP 地址是工作节点的 IP 地址。在主节点上运行以下命令。
cat ~/.ssh/id_rsa.pub | ssh "mkdir .ssh;cat >> .ssh/authorized_keys"
生成 SSH 密钥后,我们可以登录到密钥已从主节点发送到的任何其他节点,并使用以下命令:
ssh
上面命令中的“pi”表示用户,默认情况下所有使用Raspbian的PI都会有用户为“pi”,“192.168.3.216”是我客户端的IP。您必须更改它以代表您的客户端 PI 的 IP 地址。
这将要求输入密码。登录后,您键入的所有命令都将在该节点上运行,而不是在主节点上运行,但输出将显示在主节点本身上。 SSH 也可用于直接在其他节点上运行命令。例如,要更改不同节点的主机名,请按以下格式使用此命令:
ssh 'sudo echo "cilent003" | sudo nano /etc/hostname'
如上所示,我们可以使用 SSH 在其他节点/PI 中运行命令,而无需实际登录到它们。以下是安全关闭网络中 IP 地址为 192.168.3.216 的节点的另一个示例
ssh 'sudo poweroff'
下图显示了如何使用 SSH 登录工作节点(192.168.3.216)并从工作节点将控制终端返回到主节点。

从上图中可以看出,登录工作节点是直接发生的,除了第一次之外没有密码输入。但是每次终端的控制权回到主节点(192.168.3.215),都需要输入登录凭证。通过这种方式,主人始终免受外界威胁。
因此,在通过 SSH 向其他节点发出命令后,可能会出现数据必须发送到多个节点的情况。如果节点数量少,那么我们可以手动登录每个节点,连接显示器和键盘,发送文件。但当集群规模很大时,这是一种非常低效的方法。一种更简单的方法是使用 SCP 发送文件。使用命令安装 SCP:
sudo apt-get install scp
请注意,某些 Linux 操作系统可能预装了 SCP,但我们使用的 Raspbian 没有。发送单个文件的一般命令是:
scp(本地设备上的文件路径)[email (远程位置的路径)
例子:
scp /pi/example.c /pi/project
此处,要将数据发送到的远程设备由 IP 地址识别。可以使用递归选项 (-R) 发送目录中的许多文件。例如:
scp -r /pi/project /pi/project
上述命令递归地将/pi/project 中的所有文件从本地主机传输到由IP 地址标识的远程主机中的递归文件夹。
下图演示了各种 ssh 和 scp 命令。它首先列出其当前文件夹的内容,然后递归调用 \scp\ 以将当前文件夹中的所有文件传输到另一个节点中的文件夹。然后它登录到另一个节点并显示 scp 已成功将内容传输到目的地。

SCP 可以与其他一些选项一起使用来进行传输以满足我们的某些条件。这里有几个选项:
-
We can use the "-p" option to preserve modification times, access times, and modes from the original file. Example:
scp -p test.c :~/
Here the access time, access modes and last modification time of the file "test.c" will be preserved in the destination node as well.
-
SCP allows the files to be compressed before they can be sent across the network to the destination. This is very useful when the file(s) is very big to be transferred, and hence compressing will increase the speed at which it will be sent. To do this we use the option "-C". Example:
scp -pC test.c :~/
Here we can see that multiple options can be used and both their features will be applied to the command.
-
Socket programming involves sending and receiving data through ports and SCP can be used to send data through specific ports to the remote host. This can be done using the "-P" option.Example:
scp -P 21938 test.c 92.168.3.216:~/
Here, the port used to send data is 1938.
-
There might be cases, where you wouldn't want to know the status of transfer of files, like in the image above. It makes sense, to turn off the transfer status when there is a large amount of files. We can do that by using the "-q" option. Example:
scp -rq ~/files :~/files
这里将名为files的文件夹的内容转移到另一个节点上的files文件夹中,但是状态栏和调试消息都被禁用,即不显示。