Maison  >  Article  >  développement back-end  >  Comment implémenter SCP en langage Go

Comment implémenter SCP en langage Go

PHPz
PHPzoriginal
2023-04-03 11:15:301747parcourir

Avec la croissance continue de la transmission de données, il est devenu de plus en plus important de garantir la sécurité et l'efficacité de la transmission lors de la transmission de grandes quantités de données. SCP (Secure Copy Protocol) est un protocole de transfert de fichiers sécurisé, utilisé avec SSH (Secure Shell). Cet article explique comment implémenter SCP en langage Go.

  1. Connectez-vous à l'hôte distant

Tout d'abord, nous devons établir une connexion avec l'hôte distant. En utilisant le langage Go, vous pouvez facilement créer une connexion client SSH via le package SSH :

import (
    "fmt"
    "golang.org/x/crypto/ssh"
    "os"
)

func main() {
    host := "your.remote.host"
    port := "22"
    user := "remote.user"
    password := "remote.password"

    config := &ssh.ClientConfig{
        User: user,
        Auth: []ssh.AuthMethod{
            ssh.Password(password),
        },
    }

    conn, err := ssh.Dial("tcp", host+":"+port, config)
    if err != nil {
        panic(err)
    }
    defer conn.Close()
    fmt.Println("Connected to " + host)
}

Dans le code ci-dessus, nous avons créé une connexion client SSH à l'aide du package SSH. Nous avons spécifié l'adresse de l'hôte et le port ainsi que le nom d'utilisateur et le mot de passe à utiliser. Si la connexion réussit, nous imprimerons un message sur la console.

  1. Créer une session SCP

Une fois que nous avons établi une connexion SSH, nous pouvons utiliser SCP pour réaliser le transfert de fichiers. Comme pour les connexions client SSH, nous pouvons également créer une session client SCP à l'aide du package SSH :

import (
    "golang.org/x/crypto/ssh"
    "github.com/pkg/sftp"
    "os"
)

func main() {
    // Connect to the remote host (code from previous section)
    conn, err := ssh.Dial("tcp", host+":"+port, config)
    if err != nil {
        panic(err)
    }

    // Create an SCP session
    scp, err := sftp.NewClient(conn)
    if err != nil {
        panic(err)
    }
    defer scp.Close()

    // ...
}

Dans cet exemple, nous utilisons le sous-package SFTP pour créer une session SCP. Une fois que nous avons un client SCP, nous pouvons commencer à télécharger et télécharger des fichiers.

  1. Téléchargement de fichiers

Lors du téléchargement de fichiers, nous devons d'abord ouvrir le fichier et la session SCP. On peut alors ouvrir un fichier local en utilisant la méthode OpenFile de la session client SCP : OpenFile 方法打开一个本地文件:

import (
    "golang.org/x/crypto/ssh"
    "github.com/pkg/sftp"
    "os"
)

func main() {
    // Connect to the remote host and create an SCP session (code from previous sections)

    // Open the local file
    localFile, err := os.Open("local_file.txt")
    if err != nil {
        panic(err)
    }

    // Open a remote file for writing
    remoteFile, err := scp.Create("remote_file.txt")
    if err != nil {
        panic(err)
    }

    // ...
}

这段代码打开了本地文件 local_file.txt,并使用 Create 方法在远程主机上创建了一个名为 remote_file.txt 的文件。现在,我们可以将本地文件复制到远程主机上:

import (
    "golang.org/x/crypto/ssh"
    "github.com/pkg/sftp"
    "os"
    "io"
)

func main() {
    // Connect to the remote host and create an SCP session (code from previous sections)

    // Open the local file
    localFile, err := os.Open("local_file.txt")
    if err != nil {
        panic(err)
    }

    // Open a remote file for writing
    remoteFile, err := scp.Create("remote_file.txt")
    if err != nil {
        panic(err)
    }

    // Copy the local file to the remote file
    _, err = io.Copy(remoteFile, localFile)
    if err != nil {
        panic(err)
    }

    // ...
}

上面的代码将本地文件复制到远程主机上。我们使用 Go 的 io.Copy 函数实现文件复制。在本例中,我们将本地文件传递给 io.Copy 的第二个参数,将远程文件传递给 io.Copy 的第一个参数。

  1. 下载文件

与上传文件类似,我们也需要先打开文件和 SCP 会话。然后,我们可以使用 SCP 客户端会话的 Open 方法打开一个远程文件:

import (
    "golang.org/x/crypto/ssh"
    "github.com/pkg/sftp"
    "os"
)

func main() {
    // Connect to the remote host and create an SCP session (code from previous sections)

    // Open a remote file for reading
    remoteFile, err := scp.Open("remote_file.txt")
    if err != nil {
        panic(err)
    }
    defer remoteFile.Close()

    // Open the local file for writing
    localFile, err := os.Create("local_file.txt")
    if err != nil {
        panic(err)
    }
    defer localFile.Close()

    // ...
}

上述代码使用 Open 方法打开名为 remote_file.txt 的远程文件,并使用 Create 方法在本地文件系统上创建了一个名为 local_file.txt 的本地文件。现在,我们可以将远程文件复制到本地文件:

import (
    "golang.org/x/crypto/ssh"
    "github.com/pkg/sftp"
    "os"
    "io"
)

func main() {
    // Connect to the remote host and create an SCP session (code from previous sections)

    // Open a remote file for reading
    remoteFile, err := scp.Open("remote_file.txt")
    if err != nil {
        panic(err)
    }
    defer remoteFile.Close()

    // Open the local file for writing
    localFile, err := os.Create("local_file.txt")
    if err != nil {
        panic(err)
    }
    defer localFile.Close()

    // Copy the remote file to the local file
    _, err = io.Copy(localFile, remoteFile)
    if err != nil {
        panic(err)
    }

    // ...
}

与上传文件一样,我们使用 Go 的 io.Copyrrreee

Ce code ouvre le fichier local local_file.txt et utilise Le Create La méthode crée un fichier nommé remote_file.txt sur l'hôte distant. Maintenant, nous pouvons copier le fichier local sur l'hôte distant :

rrreee

Le code ci-dessus copie le fichier local sur l'hôte distant. Nous utilisons la fonction io.Copy de Go pour implémenter la copie de fichiers. Dans cet exemple, nous passons le fichier local au deuxième paramètre de io.Copy et le fichier distant au premier paramètre de io.Copy. 🎜
    🎜Téléchargement de fichiers🎜🎜🎜Semblable au téléchargement de fichiers, nous devons également d'abord ouvrir le fichier et la session SCP. On peut alors ouvrir un fichier distant en utilisant la méthode Open de la session client SCP : 🎜rrreee🎜Le code ci-dessus utilise la méthode Open pour ouvrir un fichier nommé remote_file .txt code> et créez un fichier local nommé <code>local_file.txt sur le système de fichiers local à l'aide de la méthode Create. Maintenant, nous pouvons copier le fichier distant dans le fichier local : 🎜rrreee🎜 Comme pour le téléchargement de fichiers, nous utilisons la fonction io.Copy de Go pour implémenter la copie de fichiers. 🎜🎜De cette façon, nous avons achevé le processus d'implémentation de SCP en langage Go. Avec le langage Go et les packages SSH et SFTP, nous pouvons facilement implémenter le transfert de fichiers SCP. 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn