Yıllarca bir betikte çalışan bir scp komutu, güncel bir istemcide tünelle hiç ilgisi olmayan bir yol hatasıyla başarısız olabilir. VPN baytları taşıdı; istemci sunucudan sunucunun çözemediği bir ad istedi. Güncel OpenSSH scp varsayılan olarak SFTP üzerinden aktarır ve SFTP eski protokol gibi kabuk tarzı genişletme yapmaz. Komutu kendi hesabınızdan dışarıya doğru izlemek, yolun gerçekte nerede yorumlandığını gösterir.

Hesaptan başlayın, sonra yazabildiği dizinden

İki nokta üst üste iki ad alanını ayırır ve yalnızca sol taraf yazdığınız makineye aittir. Sonrasındaki her şeyi sunucu çözer; kimlik doğruladığınız hesabın altında, o hesabın sahip olduğu dosya sistemi görünümünün içinde. Komutu oluşturmadan önce ikisini de doğrulayın, çünkü yönetici için doğru olan bir yol aktarım kullanıcısı için otomatik olarak doğru değildir. Bu fark, ağ arızası gibi görünen izin hatalarının çoğunun kaynağıdır.

Sunucuya kendi görünümünü sorun: ssh [email protected] pwd ve ssh [email protected] ls -ld /srv/archive. İkinci komut izin reddedildi bildirirse tünel sağlamdır ve yol o hesap için kullanılamaz. Aktarımın sürebilmesi için izinleri genişletmek yerine sahipliği düzeltin veya başka bir hedef seçin.

Kısıtlı bir SFTP yapılandırması, bir chroot'u dosya sisteminin kökü olarak sunabilir. Bu görünümün içinde mutlak bir yol chroot içinde mutlaktır, ki bu yöneticinin ana makinede gördüğü konumla aynı değildir.

İki nokta üst üstenin iki tarafını da açıkça adlandırın

Bir yükleme, yerel temel adın karşı tarafta kabul edileceğini varsaymak yerine uzak dosya adını belirtmelidir.

scp q3-invoice.csv [email protected]:/home/transfer/drop/q3-invoice.csv

Bir indirme, tam olarak aynı nedenle yerel hedefi belirtmelidir. İki ad alanı bağımsızdır ve eşleştiklerini varsayan bir betik, uzak ağacın farklı bir düzen kullandığı ilk anda bozulur.

scp [email protected]:/srv/archive/2026-q3.csv ./2026-q3.csv

Bakımı yapılan bir betikte ~otheruser kullanmaktan kaçının. Başka bir hesabın ev dizinini genişletmek uzak kabuk özelliğiydi ve bir SFTP sunucusu bunu taklit eden uzantıyı uygulamayabilir. Hesabın gerçekten açabildiği mutlak yolu yazın ve boşluk içeren yerel yolları, sunucudaki bir kabuk için yazılmış tırnak katmanlarını kopyalamak yerine tırnak içine alın.

scp'nizin gerçekte hangi protokolü kullandığını bilin

OpenSSH 9.0'dan beri istemci varsayılan olarak SFTP kullanır ve dağıtımlar bu davranışı kendi takvimlerine göre benimser veya geriye taşır. Sürüm dizesi istemcinin ne amaçladığını söyler, ancak satıcı derlemesi upstream'den farklı olabilir, bu yüzden gerçekten çalıştırdığınız istemciyi kontrol edin: ssh -V.

İki protokol adları farklı çözer. Eski SCP, uzak kullanıcı kabuğundan yolu genişletmesini ister, bu yüzden joker karakterler ve tildeler o kabuk tarafından kendi kurallarıyla işlenir. SFTP bunun yerine dosya aktarım işlemleri yayınlar, bu yüzden bir joker karakter ya istemci tarafından genişletilir ya da hiç genişletilmez. İkisi de SSH içinde aynı makineye gider, bu yüzden bir ana makine iki istemci altında farklı davranabilir.

scp -v istediği alt sistemi yazdırır ve bir sftp alt sistem satırı modern yolun kullanıldığını doğrular. scp -O eski protokolü desteklendiği ve gerçekten gerektiği yerde zorlar ve kendi tırnak kurallarını da beraberinde geri getirir. Bu bir VPN seçeneği değil, sunucuda bir şeyi etkinleştirmenin yolu değil ve ana makine anahtarı denetimini gevşetmek için bir neden değildir.

Betik ona güvenmeden önce yolu test edin

Bir yol sorunu en kötü anda, gece kimsenin izlemediği otomatik bir işte ortaya çıkar. Hedefi önce küçük bir dosya ve işin kullandığı tam hesap ile kanıtlayın ve o test komutunu iş tanımının yanında tutun. Test farklı bir hesap veya farklı bir dizin gerektiriyorsa iş de gerektirecektir.

Sunucu tarafını da kontrol edin. grep -i subsystem /etc/ssh/sshd_config bir SFTP alt sisteminin yapılandırılıp yapılandırılmadığını gösterir ve sftp -b /dev/null [email protected] yalnızca o alt sistem yanıt verdiğinde başarıyla çıkar. SSH oturum açmalarını kabul eden ama alt sistemi olmayan bir ana makine, oturum açma testinde tamamen sağlıklı görünmesine rağmen her modern aktarımda başarısız olur.

İstemci sürümünü, kullanılan protokolü ve mutlak uzak yolu iş notlarına kaydedin. Bir sonraki yükseltme bir varsayılanı değiştirdiğinde, o not beş dakikalık bir düzeltme ile tahminlerle dolu bir öğleden sonra arasındaki farktır.

İlgili makaleler