Yerel bir Linux veya macOS sistemi ile SSH üzerinden bir ECS Linux örneği arasında dosya aktarmak için scp, sftp veya rsync araçlarından birini seçin.
Aktarım aracı seçimi
Senaryonuz için en uygun aracı belirleyin.
scp: Hızlı, tek dosyalı aktarımlar için uygundur. Söz dizimi basittir.
sftp: Dosyalara göz atmak, silmek ve yeniden adlandırmak için FTP benzeri etkileşimli oturum sunar.
rsync: Dizin senkronizasyonu, yedekleme veya çok sayıda küçük dosya için idealdir. Artımlı algoritması sayesinde yalnızca farklılıkları aktarır.
Kararsız Ağlar: Büyük dosyalar için
rsyncveyasftpiçindeki kaldığı yerden devam etme (resumable transfer) özelliğini kullanın.
Ayrıntılı teknik karşılaştırma:
Yordam
Başlamadan önce
Dosya aktarmadan önce aşağıdaki kontrolleri tamamlayın.
-
Örneğin genel IP adresini alın
Örnekte genel bant genişliği etkinleştirilmiş olmalıdır. ECS konsolundaki Instance list sayfasından genel IP adresini not edin.
-
Güvenlik grubu kurallarını yapılandırın
Bu araçlar SSH'yi (varsayılan olarak 22 numaralı bağlantı noktası) kullanır. Güvenlik grubunun, yerel IP adresinizden bu bağlantı noktasına gelen TCP trafiğine izin verdiğinden emin olun.
Action: Allow
Protocol Type: Custom TCP
Port Range: 22/22 (veya özel SSH bağlantı noktanız)
-
Source: Güvenlik amacıyla yerel genel IP adresinizi girin.
Yerel terminalinizde
curl ifconfig.meveyacurl ip.sbkomutunu çalıştırarak IP adresinizi öğrenebilirsiniz.
-
İç güvenlik duvarını kontrol edin
İşletim sistemi güvenlik duvarı (
firewalldveyaufwgibi) da bağlantıyı engelleyebilir.Örneğe giriş yapın ve güvenlik duvarı durumunu kontrol edin.
Güvenlik duvarı etkinse SSH'ye veya 22 numaralı bağlantı noktasına izin verdiğinden emin olun. Bir bağlantı noktasını veya hizmeti açmak için işletim sisteminizin belgelerine bakın.
scp kullanarak dosya aktarma
Secure Copy Protocol (scp), yerel bilgisayar ile uzak ana bilgisayar arasında dosya ve dizin kopyalar.
Bir örneğe dosya veya dizin yükleme
Bir dosyayı veya klasörü örneğinize yükleyin. Şifreniz istenecektir.
# Upload a single file to the instance
sudo scp <local_file_path> <instance_username>@<public_ip_address>:<remote_directory_path>
# Upload a local directory to the instance
sudo scp -r <local_directory_path> <instance_username>@<public_ip_address>:<remote_directory_path>
Örnek:
Genel IP adresi 1xx.xxx.xxx.121 olan bir örnekteki /home/ecs-user/ dizinine /opt/test.txt dosyasını yükleyin:
sudo scp /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user/
Bir örnekten dosya veya dizin indirme
Örneğinizden bir dosya indirin. Şifreniz istenecektir.
Note :scp, çok sayıda küçük dosya için verimsizdir. Bunları aktarmadan önce.tar.gzdosyası olarak arşivleyin veyarsynckullanın.
# Download a single file to your local machine
sudo scp <instance_username>@<public_ip_address>:<remote_file_path> <local_directory_path>
# Download a directory from the instance to your local machine
sudo scp -r <instance_username>@<public_ip_address>:<remote_directory_path> <local_directory_path>
Örnek:
Genel IP adresi 1xx.xxx.xxx.121 olan bir örnekten /home/ecs-user/test.txt dosyasını yerel /opt/ dizinine indirin:
sudo scp ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test.txt /opt/
Etkileşimli dosya aktarımları için sftp kullanma
SSH File Transfer Protocol (SFTP), uzak sunucuda dosya yönetimi için etkileşimli bir oturum başlatır.
Örneğe bağlanma
Bir sftp bağlantısı kurun. Bağlantı kurulduğunda istem sftp> olarak değişir.
sudo sftp <instance_username>@<public_ip_address>
Bir örneğe dosya veya dizin yükleme
# Upload a single file
sftp> put <local_file_path> <remote_directory_path>
# Upload an entire directory
sftp> put -r <local_directory_path> <remote_directory_path>
Örnekler:
-
/opt/test.txtdosyasını örnekteki/home/ecs-user/dizinine yükleyin:sftp> put /opt/test.txt /home/ecs-user -
Yerel
/opt/test/dizinini örnekteki/home/ecs-user/dizinine yüklemek için:sftp> put -r /opt/test/ /home/ecs-user/
Bir örnekten dosya veya tüm dizinleri indirme
# Download a single file
sftp> get <remote_file_path> <local_directory_path>
# Download an entire directory
sftp> get -r <remote_directory_path> <local_directory_path>
Örnekler:
-
/home/ecs-user/test.txtdosyasını örnekten yerel/optdizininize indirmek için:sftp> get /home/ecs-user/test.txt /opt -
/home/ecs-user/test/dizinini örnekten yerel/optdizininize indirmek için:sftp> get -r /home/ecs-user/test/ /opt
Aktarımı kaldığı yerden devam ettirme
Büyük bir dosya aktarımı kesintiye uğrarsa, reput (yükleme) ve reget (indirme) komutlarını kullanarak aktarımı kaldığı yerden sürdürebilirsiniz.
# Resume an upload
sftp> reput <local_file_path> <remote_file_path>
# Resume a download
sftp> reget <remote_file_path> <local_file_path>
Note : SFTP'de kaldığı yerden devam etme özelliği yalnızca tek dosyalar için etkilidir. Bir dizin aktarımı kesintiye uğrarsa SFTP'den çıkmanızı ve verimli senkronizasyon için rsync kullanmanızı öneririz.
Oturumu sonlandırma
İşlemlerinizi tamamladıktan sonra quit veya bye komutunu kullanarak sftp oturumundan çıkın.
Dosya ve dizin senkronizasyonu için rsync kullanma
rsync , büyük ölçekli, artımlı veya tekrarlayan aktarımlar için idealdir.
Aracı yükleme
Hem yerel makinenizde hem de örnekte rsync yüklü olduğundan emin olun.
# On CentOS / Alibaba Cloud Linux
sudo yum install -y rsync
# On Debian / Ubuntu
sudo apt-get update && sudo apt-get install -y rsync
Yaygın seçenekler
rsync standart kullanımı genellikle -avz seçeneklerini içerir:
-a(archive): Arşiv modu,-rlptgoDseçeneğine eşdeğerdir. Özyinelemeli olarak senkronize eder ve izinler ile zaman damgaları gibi tüm dosya niteliklerini korur.-v(verbose): Aktarım sürecine ilişkin ayrıntılı bilgileri görüntüler.-z(compress): Bant genişliğinden tasarruf etmek için verileri aktarım sırasında sıkıştırır. Ancak yüksek bant genişliğine sahip bağlantılarda CPU sıkıştırması dar boğaz oluşturabilir ve-zseçeneğinin atlanması daha hızlı olabilir.
Üretim ortamları için yaygın seçenekler
ECS örneğine dosya ve dizin yükleme veya senkronize etme
Dosyaları bir örneğe yüklemek için yerel makinenizden aşağıdaki komutu çalıştırın. Şifrenizi girmeniz istenecektir.
sudo rsync -avz -e ssh <local_path> <logon_username>@<public_ip_address>:<remote_path>
Örnekler:
-
/opt/test.txtdosyasını genel IP adresi1xx.xxx.xxx.121olan bir örneğin/home/ecs-userdizinine yüklemek için:sudo rsync -avz -e ssh /opt/test.txt ecs-user@1xx.xxx.xxx.121:/home/ecs-user -
Yerel
/opt/test/dizinini genel IP adresi1xx.xxx.xxx.121olan örnekteki/home/ecs-user/testdiziniyle senkronize etmek için:sudo rsync -avz -e ssh /opt/test/ ecs-user@1xx.xxx.xxx.121:/home/ecs-user/test
Bir örnekten dosya ve dizin indirme veya senkronize etme
Dosyaları bir örnekten yerel makinenize indirmek için aşağıdaki komutu yerel olarak çalıştırın. Şifrenizi girmeniz istenecektir.
sudo rsync -avz -e ssh <instance_username>@<public_ip_address>:<remote_path> <local_path>
Üretimde uygulama
-
Çok sayıda küçük dosyayla başa çıkma: önce arşivleyin, sonra aktarın
Binlerce küçük dosya içeren bir dizini aktarmak, her dosya için oluşan bağlantı ve meta veri ek yükü nedeniyle bu araçların hiçbiriyle verimli değildir. En iyi uygulama, dizini kaynak makinede tek bir dosya olarak (örneğin
.tar.gz) arşivleyip sıkıştırmak, arşivi aktarmak ve ardından hedef makinede çıkartmaktır. -
SSH yapılandırma dosyasıyla komutları basitleştirme
Yerel
~/.ssh/configdosyanızda ECS örneğiniz için bir takma ad (örneğinmy-prod-server) oluşturarak bağlantı ve aktarım komutlarını basitleştirebilirsiniz.# Add the following to ~/.ssh/config Host my-prod-server HostName 118.178.x.x User ecs-user Port 22 IdentityFile ~/.ssh/id_rsa_aliyun ServerAliveInterval 60Bu,
scpversynckomutlarınızı basitleştirir:# Original command: sudo scp -i ~/.ssh/id_rsa_aliyun local.txt ecs-user@118.178.x.x:/remote/ # New command: sudo scp local.txt my-prod-server:/remote/ # Original command: sudo rsync -avz -e "ssh -i ~/.ssh/id_rsa_aliyun" local_dir/ ecs-user@118.178.x.x:/remote_dir/ # New command: sudo rsync -avz local_dir/ my-prod-server:/remote_dir/
SSS
-
Belirli bir bağlantı noktası kullanarak dosyaları nasıl aktarırım?
scp: Bağlantı noktasını belirtmek için
-Pseçeneğini (büyük harf) kullanın:scp -P <port_number> ...sftp: Bağlantı noktasını belirtmek için
-Pseçeneğini (büyük harf) kullanın:sftp -P <port_number> ...rsync: SSH için bağlantı noktasını belirtmek üzere
-eseçeneğini değiştirin:rsync -avz -e "ssh -p <port_number>" ...
-
Anahtar çiftiyle bir örneğe bağlanırken özel anahtar dosyasını nasıl belirtirim?
scp: Özel anahtar dosyasını belirtmek için
-iseçeneğini kullanın:scp -i <path_to_private_key> ...sftp: Özel anahtar dosyasını belirtmek için
-oIdentityFileseçeneğini kullanın:sftp -oIdentityFile=<path_to_private_key> ...rsync: SSH için özel anahtarı belirtmek üzere
-eseçeneğini değiştirin:rsync -e "ssh -i <path_to_private_key>" ...
Başvurular
ECS örneğine yüklediğiniz önemli dosyaları yedeklemek için bkz. Elle anlık görüntü oluşturma.
Dosyaları bir Windows örneğine yüklemeniz gerekiyorsa başka dosya aktarım yöntemlerini kullanabilirsiniz. Bkz. Dosya aktarım yöntemi seçme.
Dosyaları Windows'tan Linux örneğine aktarmak için WinSCP gibi bir araç kullanın. Bkz. WinSCP ile Linux örneğine dosya aktarma.