golang で SFTP でファイルを転送する

こんにちは。おなかがいっぱい、きたけーす。

いつまで、このネタひっぱるねんっていうかんじですが、昨日のエントリ(http://kitak.hatenablog.jp/entry/2014/10/20/055049)に続いて、今度はURLの猫ちゃん画像をSFTPで転送してみる。

こんなかんじ。

package main

import (
    "code.google.com/p/go.crypto/ssh"
    "github.com/pkg/sftp"
    "io/ioutil"
    "net/http"
)

func main() {
    var url string = "http://placekitten.com/g/640/340"

    response, err := http.Get(url)
    if err != nil {
        panic(err)
    }
    defer response.Body.Close()

    body, err := ioutil.ReadAll(response.Body)
    if err != nil {
        panic(err)
    }

    config := &ssh.ClientConfig{
        User:            "kitak",
        HostKeyCallback: nil,
        Auth: []ssh.AuthMethod{
            ssh.Password("PASSWORD"),
        },
    }
    config.SetDefaults()
    sshConn, err := ssh.Dial("tcp", "example.com:22", config)
    if err != nil {
        panic(err)
    }
        defer sshConn.Close()

    client, err := sftp.NewClient(sshConn)
    if err != nil {
        panic(err)
    }
        defer client.Close()

    file, err := client.Create("/tmp/save.jpg")
    if err != nil {
        panic(err)
    }
    defer file.Close()

    _, err = file.Write(body)
    if err != nil {
        panic(err)
    }
}

今回はパスワード認証をつかったけど、ClientConfigのAuthプロパティで公開鍵認証の指定もできる。

参考にしたページ