Go İle SCP (Secure Copy Protocol) Dosya İşlemleri
Lokal ortamda dosya oluşturma, okuma ve yazma işlemleriyle ilgili olarak Go programlama dilinde dosya yazma ve okuma işlemleri başlıklı yazıda temel paket kullanımlarına değinmiş, kullanıcıdan istenen bilgilerle birlikte dosya yazma işlemleri sağlamıştık. Ayrıca SCP (Secure Copy Protocol) kullanımı ve becerilerine değindiğim SFTP ve SCP kullanımı başlıklı yazıda kullanım becerilerine değinmiştim.
Bu yazıda uygulamayı biraz daha geliştirip ve her iki yazıya da ortak bir örnek olabilecek şekilde, lokalde tutulan bir dosyayı uzak sunucuya kopyalayacak/güncelleyeceğiz. Uzak sunucu olarak hızlı bir şekilde DigitalOcean üzerinden oluşturduğum sunucuyu kullanacağım.
package main
import (
"os"
scp "github.com/bramvdbogaerde/go-scp"
"github.com/bramvdbogaerde/go-scp/auth"
"golang.org/x/crypto/ssh"
)
func main() {
sshConfig, err := auth.PrivateKey("root", "/Users/[local-user-name]/.ssh/id_rsa", ssh.InsecureIgnoreHostKey())
checkError(err)
scpClient := scp.NewClient("[remore-server-ip]:22", &sshConfig)
err = scpClient.Connect()
checkError(err)
fileData, err := os.Open("/Users/local-user-name/Desktop/test.txt")
checkError(err)
scpClient.CopyFile(fileData, "/var/www/html/test/test.txt", "0655")
defer scpClient.Session.Close()
defer fileData.Close()
}
func checkError(err error) {
if err != nil {
panic(err)
}
}
Yukarıdaki kodu GitHub üzerinden görüntülemek isterseniz burayı tıklayabilirsiniz. Başlangıç olacak auth.PrivateKey
üzerinden SSH Key ile sunucu bağlantısı gerçekleştiriyoruz. SSH Key'in sunucuda tanımlı olması önemli.
Bağlantı işleminin (Connect()
) başarıyla gerçekleştirilmesinin ardından lokal olarak sahip olduğumuz ve içeriği “Hello World!” olan test.txt
uzantılı metin dosyasının içeriğini os.Open()
alıyoruz. Lokaldeki dosyamızın içeriği ise Edip Cansever’in bir şiirinden (Toplu Şiirleri I / Yerçekimli Karanfil / Tragedyalar (1964)) oluşuyor.
cat test.txt
Sonra her şey birdenbire çirkin, birdenbire çirkin, birdenbire
Çirkindi
Bozuldu bir akşamüstü kıyılara çıkmak çünkü
Eller bir soğuk el resmine girip dondular
Ay çürüdü
Her şey bir hizada kaldı, bütün eşyaları kaldırdılar
O kaldı
Bir o kaldı: gelişen korku.
Yani kutsal kitaplardaki değil ve çağdaş felsefedeki
Seçkin bir dili abartırkenki görkemli
Bir korku değil
Değil de, ne Romalı bir köleninki
Ne engizisyon mahkemelerindeki, ne de
Barışsever bir Yahudinin
Avlanırken duyduğu
Bir korku da değil bu
Ve bütün insan avlarında duyulan
Konuşmaya ya da telaşlanmaya
Hiç mi hiç vakit bırakmadan
Tüyler, anılar bir daha yaşasın, bırakmadan
Kocaman bir "vur" sesi
Var ya
O bile değil.
Gelişen bir korku bu yalnız
Umudu, umutsuzluğu
Bir anlama getiren
Anlamsız bir soy olma korkusu.
Alınan içeriği CopyFile()
ile belirtilen /var/www/html/test/test.txt
yoluna iletiyoruz. Hepsi bu kadar.