Я пытаюсь загрузить фид продукта в аккаунт Google Merchant SFTP. Я могу загрузить файл вручную через командную строку, но при попытке сделать это через Go встретите следующую ошибку.SFTP In Go Ошибка: у пользователя нет соответствующего разрешения на чтение
Ошибка: sftp: "User does not have appropriate read permission." (SSH_FX_PERMISSION_DENIED)
Я использую github.com/pkg/sftp
пакет, следуя примеру в https://godoc.org/github.com/pkg/sftp#Client.Open. Я подозреваю, что шаблон Create
/Write
здесь оказался отличным от простого put
из командной строки.
Код
func (g *GoogleExporter) ExportToSFTP(file []byte) error {
// Creating an SSH connection
sshConfig := &ssh.ClientConfig{
User: g.Creds.AccessData.SFTPUser,
Auth: []ssh.AuthMethod{
ssh.Password(g.Creds.AccessData.SFTPPassword),
},
}
hostPort := fmt.Sprintf("%s:%d", SFTPHostName, SFTPHostPort)
connection, err := ssh.Dial("tcp", hostPort, sshConfig)
if err != nil {
return err
}
fmt.Println(">> SSH Connection Created!")
// Creating an SFPT connection over SSH
sftp, err := sftp.NewClient(connection)
if err != nil {
return err
}
defer sftp.Close()
fmt.Println(">> SFTP Client Created!")
// Uploading the file
remoteFileName := "products.xml" // TODO: Make this name configurable
remoteFile, err := sftp.Create(remoteFileName)
if err != nil {
return err
}
fmt.Println(">> SFTP File Created!")
if _, err := remoteFile.Write(file); err != nil {
return err
}
fmt.Println("Successfully uploaded product feed to SFTP, file:%s user:%s", remoteFileName, g.Creds.AccessData.SFTPUser)
util.Log("Successfully uploaded product feed to SFTP, file:%s user:%s", remoteFileName, g.Creds.AccessData.SFTPUser)
// Confirming if the file is there
if _, err := sftp.Lstat(remoteFileName); err != nil {
return err
}
return nil
}
Ошибка причиной этой линии:
remoteFile, err := sftp.Create(remoteFileName)
Вы не установили текущий рабочий каталог при создании файла. 'Sftp.Create ("/ ваш/рабочий/путь/products.xml")'. Возможно, в момент подключения ваш пользователь не имеет каких-либо привилегий со стандартным каталогом. – Motakjuq
Я попытался сделать простой put из командной строки, и он загрузил файл с флагами как '--w - w - w-'. Когда я смотрю на документы для 'sftp.Create', создается файл с' 0666', что и вызывает его. Мне нужно создать файл с правами только на запись. – Danish