port numarası belirtilen scp


793

Uzak bir sunucudan yerel makineme bir dosya scp etmeye çalışıyorum. Yalnızca 80 numaralı bağlantı noktasına erişilebilir.

Denedim:

scp -p 80 username@www.myserver.com:/root/file.txt .

ancak şu hatayı aldı: cp: 80: No such file or directory

Bir scp komutunda bağlantı noktası numarasını nasıl belirleyebilirim?


33
port başkent olmalı -P 80
Eliethesaiyan

Yanıtlar:


1406

Ssh'den farklı olarak, scp portu küçük harf p yerine ayarlamak için büyük P anahtarını kullanır:

scp -P 80 ... # Use port 80 to bypass the firewall, instead of the scp default

Küçük p anahtarı, zaman ve modların korunması için scp ile kullanılır.

İşte scp'nin man sayfasından, iki anahtarla ilgili tüm ayrıntıların yanı sıra scp için büyük P harfinin neden seçildiğine dair bir açıklama:

-P bağlantı noktası Uzak ana bilgisayarda bağlanacak bağlantı noktasını belirtir. Bu seçeneğin büyük bir 'P' ile yazıldığına dikkat edin, çünkü -p zaten rcp (1) 'de dosyanın zamanlarını ve modlarını korumak için ayrılmıştır.

-p Özgün dosyadaki değişiklik sürelerini, erişim sürelerini ve modları korur.

Güncelleme ve bir kenara (yoğun şekilde oylanan) yorumlardan birini ele almak için :

Abdull'un scpopsiyon emri hakkındaki yorumu ile ilgili olarak şunları önerir:

scp -P80 -r some_directory -P 80 ...

..., seçenekleri ve parametreleri serpiştirir. getopt(1)parametrelerin seçeneklerden sonra gelmesi ve onlarla serpiştirilmemesi gerektiğini açıkça tanımlar:

Getopt ile çağrılan parametreler iki kısma ayrılabilir: getopt'in ayrıştırma şeklini değiştiren seçenekler (SYNOPSIS'deki seçenekler ve seçim) ve ayrıştırılacak parametreler (SYNOPSIS'teki parametreler). İkinci bölüm, seçenek bağımsız değişkeni olmayan ilk seçenek olmayan parametrede veya '-' karakterinin ilk oluşumundan sonra başlar. İlk bölümde '-o' veya '--options' seçeneği bulunmazsa, ikinci parçanın ilk parametresi kısa seçenekler dizesi olarak kullanılır.

Yana -rkomut satırı seçeneği başka argüman alır, some_directory"bir seçenek argüman değil olmayan ilk seçenek parametresi" dir. Bu nedenle, getopt(1)man sayfasında açıkça belirtildiği gibi , onu izleyen tüm başarılı komut satırı argümanlarının (yani, -P 80 ...seçenek olmayan (ve seçenek olmayan argümanlar) olduğu varsayılır.

Yani, aslında, getopt(1)seçeneklerin sonu ve metnin gri renkte gösterilmesiyle sınırlanan parametrelerin başlangıcı ile sunulan örnek şu şekildedir:

scp -P80 -r some_directory -P 80 ...

Bunun scpdavranışla ilgisi yoktur ve POSIX standart uygulamalarının getopt(3)C fonksiyonlarını kullanarak komut satırı seçeneklerini nasıl ayrıştırdığıyla ilgili her şey .

Komut satırı siparişi ve işlenmesi ile ilgili daha fazla bilgi için lütfen aşağıdaki sayfayı getopt(1)kullanarak okuyun :

man 1 getopt

88
btw, scpdoğru seçenekler sipariş istiyor: scp -r some_directory -P 80 ...çalışmıyor ----- ama scp -P 80 -r some_directory ...çalışıyor.
Abdull

9
Genellikle Linux'ta komutun ardından seçenekler ve daha sonra talimatlar / değerler gelir
Gary

2
@ Scp -r -p 50193 / path / to / dizininin de işe yaradığını unutmayın. Dosya yolu parametresi -r özyineleme seçeneğine bağlı değildir.
Benjamin

6
@Benjamin 50193 numaralı bağlantı noktasını kullanmak istemediğiniz sürece, bu durumda 'p' değeriniz büyük harfle yazılmalıdır.
Hiçbiri

1
@Abdull: askubuntu.com/a/307078/37574 adresinde parametre sırasını açıklayan bir yanıt var -P. Temel olarak, liman ev sahibinin önüne gitmek zorundadır. Bu hem belirsizliği önler -Phem de her iki ana bilgisayar uzaksa iki parametreye izin verir .
mwfearnley

70

Bir ipucu daha. '-P' seçeneğini scp komutundan sonra yerleştirin, içine yerleştirdiğiniz makine ikincisidir (hedef olarak da bilinir). Misal:

scp -P 2222 /absolute_path/source-folder/some-file user@example.com:/absolute_path/destination-folder

46

Bundan daha havalı olanı biliyor musun -P? hiçbir şey değil

Bu sunucuyu birkaç kereden fazla kullanıyorsanız, aşağıdaki ~/.ssh/configgibi bir girişe sahip bir dosya oluşturun / oluşturun :

Host www.myserver.com
    Port 80

veya

Host myserver myserver80 short any.name.u.want yes_anything well-within-reason
    HostName www.myserver.com
    Port 80
    User username

Sonra şunları kullanabilirsiniz:

scp username@www.myserver.com:/root/file.txt .

veya

scp short:/root/file.txt .

"Host" satırında ssh, scp, rsync, git & more ile istediğiniz her şeyi kullanabilirsiniz

Yapılandırma dosyalarında kullanabileceğiniz BİRÇOK yapılandırma seçeneği vardır, bkz:

man ssh_config


3
Sadece scp -3farklı portlarda ssh dinleyicileri olan ve sunucuların kullanımına izin veren çözüm . scp -3 -P 123 server1:/file -P 456 server2:/fileveya benzer alternatifler işe yaramaz, scp her iki sunucuda da aynı bağlantı noktasını aldı
user88595

28

Sonra farklı bağlantı noktaları standart ve kopya dosyaları gibi dosyaları arasında kullanıyorum:

scp -P 1234 user@[ip address or host name]:/var/www/mywebsite/dumps/* /var/www/myNewPathOnCurrentLocalMachine

Bu sadece ara sıra kullanım içindir, eğer bir programa göre kendini tekrarlarsa, bunu yapmak için rsync ve cron işini kullanmalısınız.


7

scp komutunda başka bir bağlantı noktası kullanmak için P harfi gibi

scp -P port-number source-file/directory user@domain:/destination

ya ali


6

scp help bize portun büyük P harfi ile belirtildiğini söyler.

~$ scp
usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

Bu yardımcı olur umarım.


2

Dosyayı ana bilgisayara kopyalanıyor: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Ana bilgisayardan dosya kopyalanıyor: scp user@host:/directory/SourceFile TargetFile

Dizini ana bilgisayardan özyineli olarak kopyalama: scp -r user@host:/directory/SourceFolder TargetFolder

NOT : Ana makine 22 numaralı bağlantı noktasından farklı bir bağlantı noktası kullanıyorsa, bunu -P seçeneği ile belirtebilirsiniz: scp -P 2222 user@host:/directory/SourceFile TargetFile


6
Sadece NOT yeterli olurdu
blagus

2

Bu, -Panahtar aracılığıyla bağlantı noktası belirtilerek elde edilebilir :

scp -i ~/keys/yourkey -P2222 file ubuntu@host:/directory/

2

yerel dosyayı sunucuya kopyalamanız gerekiyorsa (bağlantı noktasını belirtin)

scp -P 3838 /the/source/file username@server.com:/destination/file

0

Bu mükemmel bir cevap arayan birine yardımcı olacağını umuyoruz

Bağlantı noktası başka bir sunucuya veya yerel makineye tanımlanmış bir sunucudan klasör veya dosya kopyalama

  1. Yönetici haklarına sahip olduğunuz bir dizine, tercihen dosyaları kopyalamak istediğiniz makinedeki ana dizininize gidin .
  2. Aşağıdaki komutu yazın

scp -r -P bağlantı noktası kullanıcısı @ IP_adresi: / home / file / pathDirectory.

**Note:** The last . on the command directs it to copy everything in that folder to your directory of preference

0

Birçok cevap var, ama sadece basit tutabilmelisin. Hangi bağlantı noktasını bildiğinizden emin olunSSH'nin dinlediğini ve tanımlayın. İşte sorununuzu çoğaltmak için kullandım.

scp -P 12222 file.7z user@193.168.XX: / home / user / Downloads İyi çalıştı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.