Лесен урок, който да ви помогне да прехвърляте файлове към отдалечена система от вашата Linux система с помощта на командата scp.
SCP означава „Сигурно копие“. scp
е помощна програма за команден ред, предлагана от Linux, която позволява прехвърляне на файлове и директории от една машина на друга през несигурна мрежа.
Ако искате да копирате файлове от една система в друга, тогава scp
може да бъде много добър вариант за безопасно прехвърляне на файловете и директориите. Когато двете комуникиращи машини са свързани през една и съща мрежа, тогава се използва scp
става възможно.
Можете до голяма степен да разчитате на scp
команда за конфиденциалност и цялост, тъй като файлът, който се прехвърля, и паролата, използвана за прехвърлянето, са криптирани. Никаква чувствителна информация няма да бъде разкрита, дори ако някой се опита да проследи трафика, докато това прехвърляне е в ход.
В този урок ще видим различни примери за scp
команда. Ще разгледаме и някои от често използваните опции с scp
команда.
Първи стъпки с командата scp
Използвайки scp
команда можете да прехвърляте файлове/директории:
- От вашата локална машина към отдалечена машина.
- Между две отдалечени машини.
- От отдалечена машина към вашата локална машина.
Общ синтаксис:
scp [Опция] [име_на_изходен_файл] [потребител@дестинация_хост]:целева_папка
Нека разберем основните атрибути на тази команда един по един.
- [име на изходния_файл] Това е изходният файл, който искате да копирате.
- [user@destination_Host] Това е потребителското име на отдалечената система, където искате да копирате файла. IP адресът на отдалечената машина също се използва в този атрибут след „
@
‘ символ. - [destination_folder] Това е директорията, в която искате да запишете копирания файл.
Забележка: Дебелото черво (:
) символът се използва в синтаксиса, тъй като прави разлика между локални и отдалечени местоположения. Използваме дебелото черво (:
) с отдалечената система, за да посочите директорията, в която да се копират файловете. В случай, че не посочим целевата директория, тогава файловете ще бъдат копирани в домашната директория на потребителя на отдалечената система.
Опции, използвани с scp
Някои от най-популярните опции, използвани с scp
команди са изброени по-долу.
Опция | Описание |
-° С | позволява прехвърляне на компресиране на файла |
-v | дайте подробния изход |
-r | копирайте файлове и директории рекурсивно |
-стр | запазване на разрешения, режими и времена за достъп до файловете |
-П | променете порта по подразбиране, използван от scp команда |
Ще видим примерите за тези опции по-нататък в урока.
Копиране на файл от локална към отдалечена система
scp
ви позволява да прехвърляте файлове от вашата локална система към отдалечена система, като използвате следния синтаксис. Това ви позволява да прехвърляте или качвате вашите файлове на отдалечен сървър.
Общ синтаксис:
scp [име_на_файл] отдалечен_потребител@хост:[целева_папка]
пример:
scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
В този пример копираме файл „apache-tomcat-9.0.8.tar.gz“ от локалната система към отдалечената система, чийто IP адрес е „143.110.178.221“.
На отдалечената система файлът ще бъде копиран в директорията с име „gaurav“.
Изход:
gaurav@ubuntu:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav [email protected] парола: apache-tomcat-9.0.8.tar.gz 1090 KB 7995 KB /s 02:00 gaurav@ubuntu:~$
Нека проверим изхода на отдалечената система за файла.
root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav# ls apache-tomcat-9.0.8.tar.gz root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav#
По този начин файлът се копира успешно в отдалечената система с помощта на scp
команда.
Копиране на множество файлове в отдалечена система
В предишния пример се научихме да прехвърляме файл към отдалечената система с помощта на scp
команда. Сега ще видим метода за прехвърляне на множество файлове от вашата локална система към отдалечена система с помощта на тази команда.
Общ синтаксис:
scp [файл 1] [файл 2] [файл n] remote_username@remote_host:[конкретна директория]
Нека разберем този прост процес с пример.
пример:
scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
Тук в командата за копиране на отдалечената система са споменати множество файлове.
Изход:
gaurav@ubuntu:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav [email protected] Парола: ath.html 19 KB 1090 KBs9% 02 abc.txt 100% 0 0.0KB/s 00:00 ppa-purge_0.2.8+bzr56_all.deb 100% 4360 42.2KB/s 00:00 gaurav@ubuntu:~$
На отдалечената система:
root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav# ls -l общо 9800 -rw-r--r-- 1 root root 0 5 октомври 08:58 abc.txt -rw-r-- r-- 1 корен корен 9818695 5 октомври 08:35 apache-tomcat-9.0.8.tar.gz -rw-r--r-- 1 корен корен 204057 5 октомври 08:58 ath.html -rw-r-- r-- 1 root root 4360 5 октомври 08:58 ppa-purge_0.2.8+bzr56_all.deb root@ubuntu-s-1vcpu-1gb-blr1-01:~/gaurav#
И трите файла вече са копирани на отдалечената система.
Копиране на директория в отдалечената система
Можеш да използваш scp
команда за копиране на директория от вашата локална система към отдалечената система. Процесът е подобен на този при копиране на файл. За да копирате и съдържанието на директорията, можете да използвате -r
опция с scp
команда.
В -r
опцията се използва за рекурсивно копиране на директория. Това означава, че всички подпапки и файлове в директорията също ще бъдат копирани.
Общ синтаксис:
scp -r [пътека на директория] дистанционно_потребителско име@отдалечен_хост:[целева_директория]
пример:
scp -r PycharmProjects [email protected]:gaurav
Изход:
gaurav@ubuntu:~$ scp -r PycharmProjects [email protected]:gaurav [email protected] на паролата: __main__.py 100% 623 7.8KB/s 00:00 KB/s 00:00 00:00 . :00 completion.py 100% 2929 28.1KB/s 00:00 search.py 100% 4728 38.7KB/s 00:00 uninstall.py 100% 2963 32.5KB/s 00:00 hash.py 1.682% s 00:00 check.py 100% 1430 16.8KB/s 00:00 configuration.py 100% 7125 50.4KB/s 00:00 show.py 100% 6289 49.8KB/s 00:00 download.py 66230% 4 KB/s 00:00 gaurav@ubuntu:~$
Използвайки -r
опция с scp
командата копира всички подпапки и файлове в директорията от локалната машина към отдалечената система.
Показване на подробна информация за scp процеса
Можете да използвате -v
(малки букви v
) опция за показване на информацията за файловете, които се копират на отдалечена или локална система. Този тип изход се нарича още подробен изход.
Когато се използва тази опция, пълната информация за отстраняване на грешки във файла се показва на екрана.
Общ синтаксис:
scp -v [име_на_файл] потребителско_име@потребител_хост:
пример:
scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Изход:
gaurav@ubuntu:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team Изпълнение: програма /usr/bin/ssh хост 159.89.170.11, потребителски root, команда scp -v -t екип OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 декември 2017 г. debug1: Четене на конфигурационни данни /home/gaurav/.ssh/config debug1: Четене на конфигурационни данни /etc/ssh/ssh_config debug1: /etc_config ред 19: Прилагане на опции за * debug1: Свързване към 159.89.170.11 [159.89.170.11] порт 22. debug1: Връзката е установена. debug1: key_load_public: Няма такъв файл или директория debug1: идентификационен файл /home/gaurav/.ssh/id_rsa тип -1 apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB/s 01:36 debug_channel client_reput канал 0 rtype exit-status reply 0 debug1: channel 0: free: client-session, nchannels 1 debug1: fd 0 изчистване O_NONBLOCK debug1: fd 1 изчистване O_NONBLOCK Прехвърлено: изпратено 9826736, получено 4016 байта в секунда, изпратено от 2 секунди 101133.9, получено 41.3 debug1: Изходно състояние 0 gaurav@ubuntu:~$
Тук, в изхода, можете да видите, че информацията за отстраняване на грешки на файла се показва на вашия терминал, когато scp
командата се използва с -v
опция.
Прехвърляне на файлове между два отдалечени хоста
Linux ви позволява да се свържете с множество отдалечени хостове. Можете да прехвърляте файлове и директории между два отдалечени хоста с помощта на scp
команда.
Общ синтаксис:
scp remote_user_1@host_1:/[име_на_файл] remote_user_2@host_2:[папка_за_записване]
Синтаксисът може да изглежда малко по-широк, но е доста прост. Тук първата част на командата дава вход за отдалечения потребител, откъдето трябва да се копира файлът. двоеточие (:) и /
се използва за определяне на името на файла или името на директорията, която трябва да се прехвърли между двете отдалечени машини.
Втората част дава информация за целевата отдалечена система, където файлът трябва да бъде копиран.
пример:
scp -r [email protected]:gaurav [email protected]:/team
Тук ще копираме директория с име „gaurav“ рекурсивно от локалната система към отдалечена система. Файлът ще бъде копиран в папка „екип“ на отдалечената система.
Изход:
gaurav@ubuntu:~$ scp -r [email protected]:/gaurav [email protected]:/team [email protected] парола: 1.py 100% 134 261.3KB/s променливи.py 100% 377 949.2KB/s 00:00 abc.txt 100% 0 0.0KB/s 00:00 ath.html 100% 199KB 41.8MB/s 00:00 gaurav@ubuntu:~$
Тук използвахме scp
команда на локалната система за прехвърляне на директория с име 'gaurav' от един отдалечен сървър на друг.
Прехвърлете файлове от отдалечената система към вашата локална система
Можете лесно да прехвърлите файловете или директориите от отдалечената система към вашата локална система с помощта на scp
команда. С по-прости думи, можете да изтеглите множество файлове или директории от отдалечения сървър във вашата локална система, като използвате scp
команда.
Общ синтаксис:
scp remote_username@user_host:/files/file.txt /[папка_на_локалната_система]
Изход:
gaurav@ubuntu:~$ scp [email protected]:how.txt . парола на [email protected]: how.txt 100% 11 0.1KB/s 00:00 gaurav@ubuntu:~$
Тук изтеглих (копирах) файла от отдалечения сървър в моята домашна директория. Следователно използвах точка (.
), за да посочите в командата за копиране на файла в моята домашна директория.
Примерен изход:
gaurav@ubuntu:~$ ls -l how.txt -rw-r--r-- 1 gaurav gaurav 11 октомври 6 09:49 how.txt gaurav@ubuntu:~$
Тук файлът вече е копиран в моята домашна директория от отдалечения сървър.
По същия начин можете да изтеглите множество файлове или директории от отдалечения сървър, като използвате scp
команда с подходящите опции.
Компресиране на файлове за по-бързи трансфери
Понякога прехвърлянето на големи файлове може да отнеме време. Този проблем може да бъде решен, докато използвате scp
команда с -° С
(Главна буква ° С
) опция.
Използвайки -° С
опция, компресира файловете с по-голям размер, което улеснява по-бързото прехвърляне и по този начин спестява време.
Един интересен факт за тази опция е, че файлът се копира с оригиналния си размер в целевата система, но по време на процеса на прехвърляне размерът се компресира, за да се даде възможност за по-бързо прехвърляне. По този начин компресирането се извършва само в мрежата.
Общ синтаксис:
scp -C [име_на_файл] потребителско_име@потребител_хост:[целева_папка]
Нека видим сравнителен пример, за да разберем разликата.
Прехвърляне без опция -C:
gaurav@ubuntu:~$ scp -rv dlink [email protected]:team Изпълнение: програма /usr/bin/ssh хост 68.183.82.183, потребителски root, команда scp -v -r -t екип OpenSSH_7.6p1 Ubuntu-4ubuntu 3, OpenSSL 1.0.2n 7 декември 2017 г. debug1: Четене на конфигурационни данни /home/trinity/.ssh/config debug1: Четене на конфигурационни данни /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config ред 19: Прилагане на опции за * debug1 : Свързване към 68.183.82.183 [68.183.82.183] порт 22. debug1: Връзката е установена. debug1: client_input_channel_req: канал 0 rtype exit-status reply 0 debug1: канал 0: безплатно: клиентска сесия, канали 1 debug1: fd 0 изчистване O_NONBLOCK debug1: fd 1 изчистване O_NONBLOCK1 Прехвърлено: изпратено от 50075 секунди, изпратено от 50075 секунди. в секунда: изпратено 100693.7, получено 53,7 debug1: Изходно състояние 0 gaurav@ubuntu:~$
От горния изход можем да видим, че времето, необходимо за прехвърлянето е 74,6 секунди. Ще опитаме да прехвърлим същия файл с опцията -C и ще наблюдаваме разликата.
Прехвърляне с опция -C:
gaurav@ubuntu:~$ scp -Crv dlink [email protected]:team Изпълнение: програма /usr/bin/ssh хост 68.183.82.183, потребител root, команда scp -v -r -t екип OpenSSH_7.6p1 Ubuntu-4ub 3, OpenSSL 1.0.2n 7 декември 2017 г. debug1: Четене на конфигурационни данни /home/trinity/.ssh/config debug1: Четене на конфигурационни данни /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config ред 19: Прилагане на опции за * debug1 : Свързване към 68.183.82.183 [68.183.82.183] порт 22. debug1: Връзката е установена. . . webupload.img 100% 1834KB 98.7KB/s 00:18 Режими на изпращане на файлове: C0664 1877552 router.img Sink: C0664 1877552 router.img router.img 100% 1834KB/s: Изпращане на файл C0664 1877552 router.img: C0664 1877552 router.img router.img 100% 1834KB: Изпращане на файл C060 1060: 1060 режим. 3754103 DSL-2750U-Release-IN-T-01.00.07.zip Мивка: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip DSL-2750U-Release-IN.0p-T-07 100% 3666KB 218.5KB/s 00:16 Sink: E debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: channel 0: free: client-session, channels 1 debug1: fd NOgN LOCK clearing O de_bun Прехвърлено: изпратено 7518864, получено 3828 байта, за 51,0 секунди Байтове в секунда: изпратено 100245,4, получено 51,0 debug1: Изходно състояние 0 debug1: компресиране на изходящи: необработени данни 7511925, компресирани 7513136, компресирани 7513136, компресирани 7513136 данни, компресирани 100245,4, получени 51,0 debug1: Изходно състояние 0 debug1: компресиране на изходящи: необработени данни 7511925, компресирани 7513136, компресирани 7513136, компресирани 100245,4, получени 51,0 999, фактор 0,68 gaurav@ubuntu:~$
Тук лесно можем да наблюдаваме, че използвайки -° С
опция с scp
командата ни позволи да компресираме файла по мрежата, като по този начин се оказа опция за спестяване на време.
Използване на различен ssh порт за прехвърляне на файлове
Докато използвате scp
команда портът по подразбиране, който се разполага, е порт 22
. Потребителят има свободата да персонализира този избор на порт. Можете да използвате -П
(опция с главни букви P) с scp
команда, за да използвате порта по ваш избор.
Общ синтаксис:
cp -P [нов_номер_порт] [име_на_файл/име_на_директория] отдалечен_потребител@хост:[дестинационна_папка]
пример:
scp -P 4248 dlink [email protected]:team
Използвайки горната команда, файлът ще бъде прехвърлен на отдалечения сървър. Но този път използваното пристанище ще бъде порт 4248
вместо по подразбиране порт 22
.
Заключение
След като преминахме през този урок, научихме за динамичната природа на scp
команда, използвана за прехвърляне или копиране на файлове от една система в друга. Тази опция може да се използва и за изтегляне на файлове или директории от отдалечения сървър. По този начин можем да заключим, че scp
командата се оказва много полезна за прехвърляне на файлове, когато трябва да обработвате повече от една система, както и отдалечени сървъри едновременно.