Ik gebruik een Linux (centos) machine, ik heb al verbinding met het andere systeem gemaakt met ssh
. Nu is mijn vraag: hoe kan ik bestanden kopiëren van het ene systeem naar het andere?
Stel dat ik in mijn omgeving twee systemen heb, zoals System A
en System B
. Ik” gebruik een System A
machine en een ander gebruik System B
machine.
Hoe kan ik een bestand kopiëren van System B
naar System A
? En kopieer een bestand van System A
naar System B
?
Reacties
Antwoord
Syntaxis:
scp <source> <destination>
Aan kopieer een bestand van B
naar A
terwijl u bent aangemeld bij B
:
scp /path/to/file username@a:/path/to/destination
Om een bestand van B
naar A
te kopiëren terwijl u bent aangemeld bij A
:
scp username@b:/path/to/file /path/to/destination
Opmerkingen
- Om te verduidelijken: gebruik ‘ t
scp
om een bestand van of naar uw lokale computer (systeem A) te kopiëren terwijl u bent aangemeld bij een externe server (systeem B) metssh
.scp
logt u in op de externe server, kopieert het bestand en logt u vervolgens weer uit in één proces, dus voer het gewoon uit vanuit een shell op uw lokale computer. Dat gezegd hebbende, kunt uscp
gebruiken als u ‘ opnieuw bent aangemeld bij Systeem B via SSH en bestanden wilt kopiëren tussen Systeem B en Systeem C. - @DopeGhoti. Ja, u kunt ‘ geen bestanden verplaatsen tussen twee externe computers. De bron of het doel moet een lokaal bestand zijn. Als u zich echter aanmeldt op een externe machine met ssh, kunt u bestanden kopiëren tussen twee externe machines op die machine ‘ s opdrachtregel.
- Ook, een belangrijk ding om te onthouden is dat u alleen naar een map op de doelcomputer kunt scpen waarvoor u machtigingen heeft. Als u het probeert te kopiëren naar een bestemming waar de doelgebruiker geen toestemming voor heeft, kopieer het bestand dan eerst naar de homedirectory of subdirectory van de gebruiker ‘ en ssh vervolgens naar de doelmachine en sudo verplaats het naar de eindbestemming
- Onthoud -r (recursief) en -p (bewaar systeemmetadata): scp -rp < file1 > < file2 >
- Ja, gebruik
-P
om de TCP-poort op de externe host op te geven. Dit valt me elke keer op, omdatssh
-p
gebruikt.
Antwoord
Voor het geval je een alternatieve benadering nodig hebt.
Installeer sshfs. als u ubuntu / debian gebruikt:
sudo apt-get install sshfs
of, als u centos / rhel gebruikt:
sudo yum install fuse-sshfs
of, in macOS
brew install sshfs
Maak een lege map
mkdir /home/user/testdir
“link” of “mount” de twee mappen
sshfs [email protected]:/remote/dir /home/user/testdir
“unlink” de mappen
fusermount -u /home/user/testdir
Op BSD en macOS, om het bestandssysteem te ontkoppelen:
umount mountpoint
of
diskutil unmount mountpoint
Kijk hier voor meer, linuxjournal.com libfuse / sshfs
Opmerkingen
- De vraag stelt specifiek dat het betreffende besturingssysteem CentOS is; niet van Debian afgeleid.
apt-get
is een Debianisme; de juiste pakketbeheerder isyum
of, voor echt oude smaken van CentOS,up2date
ofrpm
. - Geef het antwoord op deze vraag een +1, maar het heeft mij nog steeds geholpen, en voor zover ik kan zien ook anderen.
- Niet gerelateerd, maar het is ‘ is een antwoord van een miljoen dollar xD
- Als ik het goed begrijp, geeft dit TOEGANG tot de externe bestanden, maar worden ze niet KOPIE?
- @ ToolmakerSteve je ‘ hebt helemaal gelijk: het maakt een nep-directory (mount), zodat je al je favoriete tools kunt gebruiken om dingen te kopiëren of te verplaatsen:
cp
,mv
,rm
,rsync
,unison
… Hetscp
commando zou alleen bestanden kunnen kopiëren.
Antwoord
Soms moet je met tar gaan omgaan:
tar -C / -cf - \ opt/widget etc/widget etc/cron.d/widget etc/init.d/widget \ --exclude=opt/widget/local.conf | ssh otherhost tar -C / -xvf -
Reacties
- Creativiteit? Dit is hoe we vroeger tapedrives deelden. 🙂
- Kunt u ons vertellen wat dit doet? Ik heb bijvoorbeeld geen idee wat ‘ cron ‘ te maken heeft met het kopiëren van bestanden!
- @aliqandil opt / widget etc / widget etc / cron.d / widget etc / init.d / widget zijn individuele bestanden die in het tar-archief moeten worden opgenomen. Het punt was om te illustreren waarom je soms zin moet krijgen. Deze reeks commandos streamt het tar-archief via een ssh-verbinding en unarchiveert het aan de andere kant. Er wordt dus nooit een tar-archief naar schijf geschreven. Ik gebruik dit soms om bestanden te selecteren om in één opdracht te kopiëren.
- Ow! Ik heb geleerd dat het eerste ‘ / ‘ het bronpad was! (Wat is het?) Dus dat was een domme vraag! Bedankt. 🙂
- Tar zal chdiren naar ” / ” dus alle volgende paden zijn relatief aan ” / “.
Antwoord
Als je de bestanden op beide systemen gesynchroniseerd wilt houden, kijk dan eens naar het rsync
programma:
Reacties
- Dit is een echte professionele tool.
Answer
Als je een van de algemene besturingssystemen hebt, kun je pigz installeren dat hetzelfde is als gzip, behalve dat het meerdere cores gebruikt en ben sneller over een snel netwerk. Mijn commando is een beetje anders.
tar cf - -C /opt -S <dir> | pigz | ssh <target> "pigz -d | tar xf - -C /opt -S"
of andersom om bestanden op te halen
ssh <target> "tar cf - -C /opt -S <dir> | pigz" | pigz -d | tar xf - -C /opt -S
of maak een backup van de root fs met
ssh <target> "tar cf - -C / --one-file-system -S --numeric-owner . | pigz" > root.tgz
Reacties
Antwoord
Een eenvoudigere methode die werkt met via SSH gestuurde NVIDIA Jetson-computers is om verbinding te maken met SFTP (SSH File Transfer Protocol).
Stel dat ik het document UFO_blueprint.odt
van de externe servers van NASA en verplaats het naar mijn documenten.
-
cd
naar waar u het bestand wilt opslaan
$ cd Documents
- Verbinden
$ sftp sammy@your_server_ip_or_remote_hostname
- Ga naar de directory die het bestand bevat dat moet worden overgedragen.
$ cd NASA/secret_files/
- Overzetten
$ get UFO_blueprint.odt
Gebruik in plaats daarvan
$ get -r secret_files/
Reacties
- gebruik commando voor het uploaden van bestanden
Antwoord
Unix / Linux recursieve kopie van bestanden en mappen via een beveiligde shell met behulp van de volgende code:
scp -r <host@machine_name:from_remote_directory_path> <to_local_directory_path>
Een volledig voorbeeld kan er als volgt uitzien:
scp -r sizwe@hprobook:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects
Let op: als u geen DNS-server heeft om hostnamen om te zetten, gebruik dan uw IP-adres. Het bovenstaande voorbeeld zou er zo uit kunnen zien.
scp -r 192.168.43.167:./home/sizwe/PycharmProjects ./home/immaculate/OtherPycharmProjects
Antwoord
Als ze actief zijn SCP / SSH op een andere poort, zorg ervoor dat u de hoofdletter -P
poortoptie opgeeft.
Voorbeeld:
scp -P 7121 /users/admin/downloads/* [email protected]:/home/
Reacties
- Deze vraag is zeven jaar oud en heeft veel antwoorden nu al. Hoewel het waar is dat ssh niet-standaardpoorten kan gebruiken en de ssh-client ‘ s
-P
optie is dan vereist, hoeft u ‘ Het helpt niet echt met het huidige probleem. Probeer je te concentreren op recente vragen.
scp
vaak een lastige steen. Als het aan uw behoeften zou kunnen voldoen, probeer dit dan eens linuxjournal.com/article/8904 Het koppelt het externe bestandssysteem lokaal aan.dir/
op externe machine metssh
:tar -c dir/ | gzip | gpg -c | ssh user@remote 'dd of=dir.tar.gz.gpg'
$wget -r --level=9 --no-parent --reject "index.html*" ftp://<USERID>:<PASSWORD>@<MACHINE-NAME>/path/to
Referentie1 Referentie2scp
is prima en de gemakkelijkste manier als antwoord, dus verwijder alsjeblieft de dubbele vlag alsof iemand naar een andere gaat, het meest bruikbare antwoord zal worden gemist.