scp con il numero di porta specificato


794

Sto cercando di scp un file da un server remoto al mio computer locale. È accessibile solo la porta 80.

Provai:

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

ma ho ottenuto questo errore: cp: 80: No such file or directory

Come posso specificare il numero di porta in un comando scp?


33
il porto dovrebbe essere nella capitale -P 80
Eliethesaiyan il

Risposte:


1407

A differenza di ssh, scp usa l'opzione P maiuscola per impostare la porta invece della p minuscola:

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

L'interruttore p minuscolo viene utilizzato con scp per la conservazione di tempi e modalità.

Ecco un estratto dalla pagina man di scp con tutti i dettagli relativi ai due interruttori, nonché una spiegazione del perché P maiuscola è stata scelta per scp:

-P port Specifica la porta a cui connettersi sull'host remoto. Nota che questa opzione è scritta con la 'P' maiuscola, poiché -p è già riservata per preservare i tempi e le modalità del file in rcp (1).

-p Preserva i tempi di modifica, i tempi di accesso e le modalità dal file originale.

Aggiorna e a parte per rispondere a uno dei commenti (fortemente votati) :

Per quanto riguarda il commento di Abdull sull'ordine delle scpopzioni, ciò che suggerisce:

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

..., infrange opzioni e parametri. getopt(1)definisce chiaramente che i parametri devono venire dopo le opzioni e non essere intervallati da esse:

I parametri con cui viene chiamato getopt possono essere divisi in due parti: le opzioni che modificano il modo in cui getopt eseguirà l'analisi (le opzioni e l'optstring nella SINOSSI), e i parametri che devono essere analizzati (parametri nella SINOSSI). La seconda parte inizierà dal primo parametro non-opzione che non è un argomento opzione o dopo la prima occorrenza di '-'. Se non viene trovata alcuna opzione '-o' o '--options' nella prima parte, il primo parametro della seconda parte viene utilizzato come stringa di opzioni brevi.

Poiché l' -ropzione della riga di comando non accetta ulteriori argomenti, some_directoryè "il primo parametro non opzione che non è un argomento opzione". Pertanto, come chiaramente indicato nella getopt(1)pagina man, tutti gli argomenti successivi della riga di comando che la seguono (cioè, -P 80 ...) sono considerati non-opzioni (e argomenti non-opzione).

Quindi, in effetti, questo è il modo in cui getopt(1)vede l'esempio presentato con la fine delle opzioni e l'inizio dei parametri delimitati dal testo bing successivo in grigio:

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

Ciò non ha nulla a che fare con il scpcomportamento e tutto ciò che riguarda il modo in cui le applicazioni standard POSIX analizzano le opzioni della riga di comando usando l' getopt(3)insieme delle funzioni C.

Per maggiori dettagli in merito all'ordinamento e all'elaborazione della riga di comando, leggere la getopt(1)manpage usando:

man 1 getopt

88
tra l'altro, scprichiede l'ordine delle opzioni corrette: scp -r some_directory -P 80 ...non funziona ----- ma scp -P 80 -r some_directory ...funziona.
Abdull

9
generalmente in linux il comando è seguito dalle opzioni e quindi dalle istruzioni / valori
Gary

2
@ Nota bene che anche scp -r -p 50193 / path / to / directory funziona. Il parametro del percorso del file non è legato all'opzione di ricorsione -r.
Benjamin,

6
@Benjamin A meno che tu non intendessi utilizzare la porta 50193, nel qual caso la tua 'p' dovrebbe essere in maiuscolo.
Nessuno,

1
@Abdull: c'è una risposta su askubuntu.com/a/307078/37574 che spiega l' -Pordinamento dei parametri. Fondamentalmente, la porta deve precedere l'host. Ciò previene ambiguità e consente due -Pparametri se entrambi gli host sono remoti.
mwfearnley,

70

Un suggerimento aggiuntivo. Posiziona l'opzione '-P' dopo il comando scp, indipendentemente dal fatto che la macchina su cui stai inserendo sia la seconda (nota anche come destinazione). Esempio:

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

46

Sai cosa c'è di più bello di -P? Niente

Se si utilizza questo server più volte, impostare / creare un ~/.ssh/configfile con una voce come:

Host www.myserver.com
    Port 80

o

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

Quindi puoi usare:

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

o

scp short:/root/file.txt .

Puoi usare qualsiasi cosa sulla linea "Host" con ssh, scp, rsync, git e altro

Esistono MOLTE opzioni di configurazione che puoi usare nei file di configurazione, vedi:

man ssh_config


3
Un'unica soluzione che consente l'uso di scp -3da e verso server con listener ssh su porte diverse. scp -3 -P 123 server1:/file -P 456 server2:/fileo alternative simili non funzionerebbero, scp ha assunto la stessa porta su entrambi i server
user88595

28

Sto usando porte diverse da quelle standard e copio file tra file come questo:

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

Questo è solo per un uso occasionale, se si ripete in base a una pianificazione è necessario utilizzare rsync e cron job per farlo.


7

per usare un'altra porta sul comando scp usare maiuscola P in questo modo

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

ya ali


6

scp help ci dice che la porta è specificata da P. maiuscola

~$ 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

Spero che sia di aiuto.


2

Copia del file sull'host: scp SourceFile remoteuser@remotehost:/directory/TargetFile

Copia del file dall'host: scp user@host:/directory/SourceFile TargetFile

Copia ricorsiva della directory dall'host: scp -r user@host:/directory/SourceFolder TargetFolder

NOTA : se l'host utilizza una porta diversa dalla porta 22, è possibile specificarlo con l'opzione -P: scp -P 2222 user@host:/directory/SourceFile TargetFile


6
Basta la NOTA
blagus,

2

Questo può essere ottenuto specificando la porta tramite lo -Pswitch:

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

2

se è necessario copiare il file locale sul server (specificare la porta)

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

0

Spero che questo possa aiutare qualcuno alla ricerca di una risposta perfetta

Copia di una cartella o di un file da un server con una porta definita su un altro server o macchina locale

  1. Passare a una directory in cui si dispone dei diritti di amministratore, preferibilmente la directory principale sul computer in cui si desidera copiare i file
  2. Scrivi il comando qui sotto

scp -r -P port user @ indirizzo_IP: / home / file / pathDirectory.

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

0

Ci sono molte risposte, ma dovresti essere in grado di mantenerlo semplice. Assicurati di sapere su quale porta è in ascolto SSH e definiscilo. Ecco cosa ho appena usato per replicare il tuo problema.

scp -P 12222 file.7z user@193.168.XX: / home / user / Download Ha funzionato bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.