Enviar e receber SFTP em .NET
ambiente
- Estúdio Visual
-
- Visual Studio Community 2017
- Visual Studio Community 2019
- .NET Core
-
- 3.1
- .NET Framework
-
- 4
- 4.8
- SSH.NET
-
- 2016.1.0
◗ Funciona em outras versões, mas não é confirmado
Inicialmente
Crie um programa de cliente para o SFTP enviar e receber arquivos no .NET Framework (.NET Core). Os programas relacionados ao SFTP não são padrão em .NET. Usaremos a bibliotecade terceirosSSH.NET.
SSH.NET não foi atualizado recentemente, mas é relativamente fácil implementar o programa. Não acho que existam muitas desvantagens em usá-lo porque ele também suporta o .NET Standard.
Desta vez, enviaremos e receberemos arquivos do SFTP no projeto do console .NET Core. SSH.NET suporta muitas estruturas, para que possa ser implementado em projetos diferentes do console.
Preparação com antecedência
- Visual Studio deve ser instalado
- Você tem um servidor SFTP para verificar o comportamento do SFTP
- Tenha uma conta para a sua caixa com o SFTP
- Habilite a autenticação de senha em servidores sftp ao realizar a autenticação de senha
- Ao realizar a autenticação de chaves públicas, coloque a chave pública no servidor SFTP e tenha uma chave privada (formato OpenSSH) para ser carregada no cliente.
Instale SSH.NET
Crie um projeto de console .NET Core no Visual Studio. O nome do projeto é SshNetBasic.
Recebe o "SSH.NET" da NuGet.
O pacote foi adicionado.
Autenticação de senha
Para autenticação de senha, use a classe PasswordAuthenticationMethod para definir um nome de usuário e senha.
Defina a classe ConnectionInfo com um nome de host (como sorceryforce.net ou 192.168.0.1) e o método de autenticação que você acabou de gerar. Passe para a aula "SftpClient".
O método SftpClient.Connect realmente faz a conexão, e se ele tiver sucesso, ele lança uma exceção para a próxima operação e, em caso de falha. Desconecte-se com o método Desconectar.
// 必要な情報を設定する
var host = "";
var userName = "";
var password = "";
// 認証メソッドを作成
var authMethod = new Renci.SshNet.PasswordAuthenticationMethod(userName, password);
// 接続情報を作成
var connectionInfo = new Renci.SshNet.ConnectionInfo(host, userName, authMethod);
// SFTP クライアントを作成
var client = new Renci.SshNet.SftpClient(connectionInfo);
// 接続。失敗した場合は例外が発生
client.Connect();
// 切断
client.Disconnect();
Autenticação de chaves públicas
Coloque a chave privada em qualquer pasta no cliente. Como você pode ver nas dicas de configuração, se você colocar sua chave privada em uma pasta que pode acessar outras contas, O processamento do SFTP pode falhar. Certifique-se de ter acesso à conta que executa ou apenas aos administradores.
O que é diferente da autenticação de senha é que o método de autenticação mudou para PrivateKeyAuthenticationMethod.
Especifique "PrivateKeyFile" como o segundo argumento e especifique o caminho do arquivo e a senha (se definido) onde a chave privada está colocada.
// 必要な情報を設定する
var host = "";
var userName = "";
var passPhrase = "";
var keyFilePath = @"C:\xxxxxxxxxx\id_rsa";
// 認証メソッドを作成
var authMethod = new Renci.SshNet.PrivateKeyAuthenticationMethod(userName,
new Renci.SshNet.PrivateKeyFile(keyFilePath, passPhrase));
// 接続情報を作成
var connectionInfo = new Renci.SshNet.ConnectionInfo(host, userName, authMethod);
// SFTP クライアントを作成
var client = new Renci.SshNet.SftpClient(connectionInfo);
// 接続。失敗した場合は例外が発生
client.Connect();
// 切断
client.Disconnect();
Enviar e receber arquivos com SFTP
Enviar e receber arquivos escrevendo o código de envio e recebimento após a conexão ao servidor com o método SftpClient.Connect. O que estamos fazendo é "ler arquivos locais e enviá-los para servidores SFTP" e "baixar arquivos de servidores SFTP e salvá-los localmente". Pode ser implementado sem escrever tarefas particularmente difíceis.
Você pode enviar e receber nomes de arquivos japoneses sem problemas.
/* ---------------- 中略 ------------------- */
var sendFilePath = @"C:\xxxxxxxxxxxx\テスト.txt";
var reseiveFilePath = @"C:\xxxxxxxxxxxx\テスト2.txt";
/* ---------------- 中略 ------------------- */
// 接続。失敗した場合は例外が発生
client.Connect();
// ファイルのアップロード(上書き)
using var sendStream = File.OpenRead(sendFilePath);
client.UploadFile(sendStream, Path.GetFileName(sendFilePath), true);
// ファイルのダウンロード(上書き)
using var reseiveStream = File.OpenWrite(reseiveFilePath);
client.DownloadFile(Path.GetFileName(sendFilePath), reseiveStream);
// 切断
client.Disconnect();
Resumo
SSH.NET facilita o envio e o recebimento de SFTP. Pode levar mais tempo para preparar um ambiente de teste do que implementar um programa.
Sftp faz essencialmente a mesma coisa que FTP, e a maior parte do trabalho é implementado em SSH.NET. Esta biblioteca é recomendada se você quiser usar o SFTP de forma programável.