scp met opgegeven poortnummer

Ik probeer een bestand van een externe server naar mijn lokale computer te scp. Alleen poort 80 is toegankelijk.

Ik heb het geprobeerd:

scp -p 80 [email protected]:/root/file.txt .

maar kreeg deze foutmelding: cp: 80: No such file or directory

Hoe geef ik het poortnummer op in een scp-opdracht?


Antwoord 1, autoriteit 100%

In tegenstelling tot ssh, gebruikt scp de schakelaar P in hoofdletters om de poort in te stellen in plaats van de kleine p:

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

De schakelaar p in kleine letters wordt gebruikt met scp voor het behoud van tijden en modi.

Hier is een fragment uit de man-pagina van scp met alle details over de twee schakelaars, evenals een uitleg waarom de hoofdletter P is gekozen voor scp:

-P-poort   Specificeert de poort waarmee verbinding moet worden gemaakt op de externe host. Merk op dat deze optie met een hoofdletter ‘P’ wordt geschreven, omdat -p al is
gereserveerd voor het bewaren van de tijden en modi van het bestand in rcp(1).

-p           Behoudt wijzigingstijden, toegangstijden en modi van het originele bestand.

Bonustip: hoe kan ik bepalen welke poort door de/een SSH-daemon wordt gebruikt om SSH-verbindingen te accepteren?

Deze vraag kan als volgt worden beantwoord met het hulpprogramma netstat:

sudo netstat -tnlp | grep sshd

Of gebruik de veel beter leesbare, op woorden gebaseerde namen van netstat-opties:

sudo netstat --tcp --numeric-ports --listening --program | grep sshd

De uitvoer die u zult zien, ervan uitgaande dat uw ssh-daemon is geconfigureerd met standaardwaarden voor de luisterpoorten, wordt hieronder weergegeven (met een klein beetje bijsnijden van de witruimte tussen kolommen, om de hele tabel zichtbaar te maken zonder te hoeven scrollen):

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address  Foreign Address  State       ID/Program name
tcp      0      0   0.0.0.0:22     0.0.0.0:*        LISTEN      888/sshd: /usr/sbin 
tcp6     0      0   :::22          :::*             LISTEN      888/sshd: /usr/sbin 

Belangrijke opmerking

Voor de bovenstaande voorbeelden werd sudogebruikt om netstat uit te voeren met beheerdersrechten, om allevan de programmanamen. Als u netstat als een gewone gebruiker uitvoert (d.w.z. zonder sudo en ervan uitgaande dat u geen beheerdersrechten hebt gekregen, via een andere methode), ziet u alleen programmanamen die worden weergegeven voor sockets die uw UID als eigenaar hebben. De Programmanamenvoor sockets van andere gebruikers worden niet weergegeven (d.w.z. worden verborgen en in plaats daarvan wordt een plaatsaanduidingsstreepje weergegeven):

Proto Recv-Q Send-Q Local Address   Foreign Address  State       ID/Program name
tcp        0      0 127.0.0.1:46371 0.0.0.0:*        LISTEN      4489/code
...
tcp        0      0 0.0.0.0:111     0.0.0.0:*        LISTEN      -                   
tcp        0      0 127.0.0.53:53   0.0.0.0:*        LISTEN      -                   
tcp        0      0 0.0.0.0:22      0.0.0.0:*        LISTEN      -                   
...

Bijwerken en terzijde om een van de (zwaar geüpdatete) opmerkingen aan te pakken:

Met betrekking tot Abdull’s opmerking over scpoptievolgorde, wat hij suggereert:

scp -r some_directory -P 80 ...

…, wisselt opties en parameters af, aangezien de schakeloptie -rgeen extra argumenten nodig heeft en some_directorywordt behandeld als de eerste parameter van de opdracht, waardoor -Pen alle volgende opdrachtregelargumenten zien eruit als aanvullende parameters voor de opdracht (dwz argumenten met koppeltekenprefix worden niet langer als schakelopties beschouwd).

getopt(1)definieert duidelijk dat parameters naopties (d.w.z. schakelaars) moeten komen en er niet mee moeten worden afgewisseld, willy-nilly:

De parameters waarmee getopt wordt aangeroepen, kunnen in twee delen worden verdeeld: opties die de manier wijzigen waarop getopt de parsing uitvoert (de opties en de optstring in de SYNOPSIS), en de parameters die moeten worden geparseerd (parameters in de SYNOPSIS ). Het tweede deel begint om
de eerste niet-optieparameter die geen optieargument is, of na het eerste voorkomen van ‘–‘. Als er geen optie ‘-o’ of ‘–options’ wordt gevonden in het eerste deel, wordt de eerste parameter van het tweede deel gebruikt als de korte optiereeks.

Aangezien de opdrachtregeloptie -rgeen verdere argumenten nodig heeft, is some_directory“de eerste niet-optieparameter die geen optieargument is.” Daarom, zoals duidelijk uiteengezet in de getopt(1)man-pagina, wordt aangenomen dat alle volgende commandoregelargumenten die erop volgen (dwz -P 80 ...) zijn niet-opties (en niet-optie-argumenten).

Dus in feite is dit hoe getopt(1)het voorbeeld ziet met het einde van de opties en het begin van de parameters afgebakend door grijze tekst:

scp -r some_directory -P 80 ...

Dit heeft niets te maken met scp-gedrag en alles met hoe POSIX-standaardtoepassingen opdrachtregelopties parseren met behulp van de getopt(3)set C-functies.

Voor meer details met betrekking tot het bestellen en verwerken van de opdrachtregel, lees de getopt(1)manpagina met:

man 1 getopt

Antwoord 2, autoriteit 6%

Een extra hint. Plaats de ‘-P’-optie na het scp-commando, ongeacht of de machine waarnaar u ssh-ing de tweede is (ook wel bestemming genoemd). Voorbeeld:

scp -P 2222 /absolute_path/source-folder/some-file [email protected]:/absolute_path/destination-folder

Antwoord 3, autoriteit 3%

Weet je wat cooler is dan -P? niets

Als je deze server meer dan een paar keer gebruikt, stel/maak dan een ~/.ssh/config-bestand in met een vermelding als:

Host www.myserver.com
    Port 80

of

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

Dan kun je het volgende gebruiken:

scp [email protected]:/root/file.txt .

of

scp short:/root/file.txt .

Je kunt alles op de “Host” regel gebruiken met ssh, scp, rsync, git & meer

Er zijn VEEL configuratie-opties die u kunt gebruiken in configuratiebestanden, zie:

man ssh_config


Antwoord 4, autoriteit 2%

Ik gebruik andere poorten dan standaard en kopieer bestanden als volgt tussen bestanden:

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

Dit is alleen voor incidenteel gebruik, als het zichzelf herhaalt op basis van een schema, moet je rsync en cron job gebruiken om het te doen.


Antwoord 5

gebruik voor het gebruik van een andere poort op het scp-commando een hoofdletter P op deze manier

scp -P port-number source-file/directory [email protected]:/destination

ja ali


Antwoord 6

scp-help vertelt ons dat de poort wordt gespecificeerd met een hoofdletter P.

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

Hopelijk helpt dit.


Antwoord 7

Dit kan worden bereikt door de poort op te geven via de schakelaar -P:

scp -i ~/keys/yourkey -P2222 file [email protected]:/directory/

Antwoord 8

Bestand kopiëren naar host:
scp SourceFile [email protected]:/directory/TargetFile

Bestand kopiëren van host:
scp [email protected]:/directory/SourceFile TargetFile

Directory recursief kopiëren van host:
scp -r [email protected]:/directory/SourceFolder TargetFolder

OPMERKING: Als de host is gebruikt een poort andere dan poort 22, u u bepaalt  -P optie:
scp -P 2222 [email protected]:/directory/SourceFile TargetFile


Antwoord 9

als u een lokaal bestand naar de server wilt kopiëren (specificeer poort)

scp -P 3838 /the/source/file [email protected]:/destination/file

Antwoord 10

Ik hoop dat dit iemand zal helpen die op zoek is naar een perfect antwoord

Een map of bestand kopiëren van een server met een gedefinieerde poort naar een andere server of lokale machine

  1. Ga naar een map waar u beheerdersrechten heeft bij voorkeur uw thuismapop de machine waar u bestanden naar wilt kopiëren
  2. Schrijf het onderstaande commando

scp -r -P poort [email protected]_address:/home/file/pathDirectory .

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

Antwoord 11

Een back-up maken van alle bestanden in alle mappen naar een externe Synology NAS via een andere externe poort:

scp -P 10022 -r /media/data/somedata/* [email protected]:/var/services/homes/user/directory/


Antwoord 12

Er zijn veel antwoorden, maar je moet het simpel kunnen houden. Zorg ervoor dat u weet naar welke poortSSH luistert en definieer deze. Dit is wat ik zojuist heb gebruikt om uw probleem na te bootsen.

scp -P 12222 file.7z [email protected]:/home/user/Downloads
Het is goed gelukt.

Other episodes