func (c *Client) Upload(local, remote string) error {
client, err := sftp.NewClient(c.SSHClient)
if err != nil {
return err
}
defer client.Close()
localFile, err := os.Open(local)
if err != nil {
return err
}
defer localFile.Close()
remoteFile, err := client.Create(remote)
if err != nil {
return err
}
_, err = io.Copy(remoteFile, localFile)
return err
}
Я вызываю эту функцию для загрузки файла в SFTP без какой-либо ошибки возврата.
Используйте командную строку для загрузки следующим образом:
Результат выполнения команды
Я использую эту функцию
var localFilePath = "./1234.zip"
var remoteDir = "upload/uuuuu.zip"
err = client.Upload(localFilePath, remoteDir)
if err != nil {
panic(err)
}
fmt.Println("ok")
Результат выполнения не возвращает ошибок, только возвращает: загрузка файла завершена
Но при посадке SFTP файла загрузки нет, попросите всех указать!
Введен:
Этот сервис разрешает только sftp-соединения
go версия go1.10.2 linux / amd64
Упростите код, весь процесс выглядит так
func Consftp(username, host, privKeyPath, local, remote string) error {
privKey, err := ioutil.ReadFile(privKeyPath)
if err != nil {
return err
}
signer, err := ssh.ParsePrivateKey(privKey)
if err != nil {
return err
}
authMethod := ssh.PublicKeys(signer)
config := &ssh.ClientConfig{
User: username,
Auth: []ssh.AuthMethod{authMethod},
HostKeyCallback: HostKeyCallback,
}
conn, err := ssh.Dial("tcp", host, config)
if err != nil {
return err
}
client, err := sftp.NewClient(conn)
if err != nil {
return err
}
defer client.Close()
localFile, err := os.Open(local)
if err != nil {
return err
}
defer localFile.Close()
remoteFile, err := client.Create(remote)
println(err)
if err != nil {
return err
}
_, err = io.Copy(remoteFile, localFile)
return err
}
код заполнен
package until
import (
"io"
"io/ioutil"
"os"
"github.com/pkg/sftp"
"golang.org/x/crypto/ssh"
)
func Consftp(username, host, privKeyPath, local, remote string) error {
privKey, err := ioutil.ReadFile(privKeyPath)
if err != nil {
return err
}
signer, err := ssh.ParsePrivateKey(privKey)
if err != nil {
return err
}
authMethod := ssh.PublicKeys(signer)
config := &ssh.ClientConfig{
User: username,
Auth: []ssh.AuthMethod{authMethod},
HostKeyCallback: HostKeyCallback,
}
conn, err := ssh.Dial("tcp", host, config)
if err != nil {
return err
}
defer conn.Close()
client, err := sftp.NewClient(conn)
if err != nil {
return err
}
defer client.Close()
localFile, err := os.Open(local)
if err != nil {
return err
}
defer localFile.Close()
remoteFile, err := client.Create(remote)
println(err)
if err != nil {
return err
}
_, err = io.Copy(remoteFile, localFile)
return err
}