在Linux上使用安全shell(SSH)进行登​​录和安全复制(SCP)以进行数据传输

SSH代表安全shell。它是一种加密的远程登录协议。本教程包括公钥/私钥身份验证,在远程服务器上安装公钥以及与SCP进行安全文件传输。

SSH代表安全shell。 它是一个加密的远程登录协议。 一旦在每个节点上建立,它可以用于与该网络中的各种其他节点进行通信。

SSH的主要优点是:

  • SSH使用RSA加密算法来生成公钥和私钥,使得入侵非常困难。
  • 由于SSH是远程登录协议,因此可以在笔记本电脑上进行配置。 这意味着您可以使用笔记本电脑无线连接到Raspberry Pi集群。
  • 由于诸如SCP(Secure Copy)和SFTP(安全文件传输协议)之类的协议运行在SSH之上,您可以使用它们将文件和文件夹直接从一个节点传输到另一个节点。
  • SSH支持一次登录,这意味着您只需要在第一次登录时输入凭据。从第二个日志开始,没有必要。

我们从开始,生成SSH密钥。 要使用SSH,应在两个或多个节点之间生成密钥,以便数据传输发生。 我们使用RSA进行加密。 请注意,在一个节点上,我们生成密钥,它将具有私钥或秘密密钥。 相同的节点也将生成一个公钥,该密钥将被发送到希望向该节点发送数据的其他节点。 在要发送数据的节点上执行以下命令。 我将这个节点称为“主节点”和其他节点“工作节点”。

cd ~
ssh-keygen --t rsa --C "raspberrypi@raspberrypi"

这两个命令设置/ home / pi / _ssh / id_rsa的默认位置来存储密钥。

如果要求输入密码,请留下密码。 一旦完成,下一步是将公钥发送到工作节点。 所以确保你的工作节点连接到网络。 现在我们可以在工作节点上设置加密密钥,所以使用的IP地址是工作节点的IP地址。 在主节点上运行以下命令。

cat ~/.ssh/id_rsa.pub | ssh pi@192.168.1.162 "mkdir .ssh;cat >> .ssh/authorized_keys"

生成SSH密钥后,我们可以登录到从主节点发送密钥的任何其他节点,并使用以下命令:

ssh pi@192.168.3.216

在上面的命令中,“pi”表示用户,默认情况下,使用Raspbian的所有PI将使用户为“pi”,“192.168.3.216”是我的客户端的IP。 您将不得不更改它来代表您的客户端PI的IP地址。

这将要求输入密码。 登录后,您输入的所有命令将在该节点上运行,而不是在主节点上运行,但输出将显示在主机本身。 SSH也可以直接在其他节点上运行命令。 例如,要更改不同节点的主机名,请使用以下格式的此命令:

ssh pi@192.168.3.216 'sudo echo "cilent001" | sudo nano /etc/hostname'
ssh pi@192.168.3.217 'sudo echo "cilent002" | sudo nano /etc/hostname'
ssh pi@192.168.3.218 'sudo echo "cilent003" | sudo nano /etc/hostname'

如上所示,我们可以使用SSH在其他节点/ PI中运行命令,而无需实际登录到其中。 以下是安全关闭IP地址为192.168.3.216的网络节点的另一个例子

ssh pi@192.168.3.216 'sudo poweroff'

下图显示了如何使用SSH登录到工作节点(192.168.3.216)和从工作节点获取控制终端返回到主节点。

从上图可以看出,登录到工作节点直接发生,这是没有密码输入,除了第一次。 但每次终端的控制回到主节点(192.168.3.215)时,必须输入登录凭证。 这样,主人总是受到外界的威胁。

因此,通过SSH向其他节点发出命令后,可能会出现数据必须发送到多个节点的情况。 如果节点数量较少,那么我们可以手动登录到每个节点,将其连接到显示器和键盘,并发送文件。 但是,当群集的大小很大时,这是一种非常低效的方法。 更简单的方法是使用SCP发送文件。 使用以下命令安装SCP:

sudo apt-get install scp

请注意,一些linux操作系统可能会预先安装SCP,但是我们使用的Raspbian没有。 发送单个文件的一般命令是:

scp(本地设备上的文件路径)pi@192.168.3.215(远程位置的路径)

例:

scp /pi/example.c pi@192.168.3.215 /pi/project

这里,发送数据的远程设备被IP地址识别。 可以使用递归选项(-R)发送目录中的许多文件。 例如:

scp -r /pi/project pi@192.168.3.216 /pi/project

上述命令将/ pi / project中的所有文件从本地主机递归传递到由IP地址标识的远程主机中的递归文件夹。

下图显示了各种ssh和scp命令。 它首先列出其当前文件夹的内容,然后递归地调用“scp”将当前文件夹中的所有文件拖放到另一个节点的文件夹中。 然后它登录到另一个节点,并显示scp已成功将内容传输到目的地。

SCP可以与其他几个选项一起使用,以便转移以满足我们的某些条件。 以下是几个选项:

    • 我们可以使用“-p”选项来保留原始文件的修改时间,访问次数和模式。 例:

      scp -p test.c pi@192.168.3.216:~/

      这里,文件“test.c”的访问时间,访问模式和最后修改时间也将保存在目标节点中。

    • SCP允许文件压缩,然后才能通过网络发送到目的地。 当文件非常大的传输时,这是非常有用的,因此压缩将增加发送速度。 为此,我们使用选项“-C”。 例:

      scp -pC test.c pi@192.168.3.216:~/

      这里我们可以看到可以使用多个选项,并且它们的特征都将应用到命令中。

    • 套接字编程涉及通过端口发送和接收数据,SCP可用于通过特定端口向远程主机发送数据。 这可以使用“-P”选项完成。示例:

      scp -P 21938 test.c pi@192.168.3.216:~/

      这里,用于发送数据的端口是1938。

    • 可能有些情况下,您不想知道文件传输的状态,如上图所示。 这是有道理的,当有大量的文件时关闭传输状态。 我们可以使用“-q”选项。 例:

scp -rq ~/files pi@192.168.3.216:~/files

这里,名为文件夹的文件夹的内容被转移到另一个节点上的文件夹,但状态栏和调试信息都被禁用,不显示。