tag: #N/T/Tool #N/T/Linux #N/T/Tool/Util #N/S/Synthesizing #N/T/Public
2021-02-28 22:27
Source: http://www.bilee.com/scp.html
Related: [[% rsync]],
Docs: https://www.opennet.ru/man.shtml?topic=scp&category=1&russian=0
https://linuxize.com/post/how-to-use-scp-command-to-securely-transfer-files/
## Описание
SCP (secure copy) - это утилита командной строки, которая позволяет безопасно копировать файлы и каталоги между двумя местоположениями.
## Шаблон
```bash
scp [-pqrvC1246] [-F ssh_config] [-S programm] [-P port] [-c cipher] [-i identity_file] [-l limit] [-o ssh_option] [[user@]SRC_HOST:]file1 [...] [[user@]DEST_HOST:]file2
```
## Примеры:
- C** Локального на удаленный** хост (Загрузка Upload)
```bash
scp -r /path/from/destination username@hostname:/path/to/destination
```
- С** удаленного на локальный** хост (Скачивание Download)
```bash
scp -r username@hostname:/path/from/destination /path/to/destination
```
#### Через промежуточный, третий хост
Напимер есть доступ к 3 машинам, A, B и C. Единственными возможными (ssh) соединениями являются: (A -> B B <-> C), нужно передать файлы с A на C
-мВерсии scp с начала 2011 года и позже могут иметь опцию «-3»:
```bash
`B$ scp -3 A:file C:file`
```
- ProxyJump для OpenSSH +7.3:
```bash
scp -oProxyJump=B thefile C:destination
```
- ProxyCommand
```bash
A$ scp -oProxyCommand="ssh -W %h:%p B" thefile C:destination
```
«-W» – довольно недавняя функция. Если у B установлен очень старый клиент SSH, используйте альтернативы:
(Behind the scenes, this just uses ProxyCommand and ssh -W.)
```bash
A$ scp -oProxyCommand="ssh B socat stdio tcp:%h:%p" thefile C:destination
A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination
```
- Pipes
```bash
A$ e cf - thefile anotherfile | ssh B "ssh C \"cd destination && tar xvf -\""
A$ (echo thefile; echo anotherfile) | cpio -o | ssh B "ssh C \"cd destination && cpio -i\""
Отдельный файл, одной строкой :
A$ ssh B "ssh C \"cd destination && cat > thefile\"" < thefile
```
- "Тоннель" через B
```bash
A$ ssh -fNML 4567:C:22 B A$ scp -P 4567 thefile localhost:destination
```
!!ssh ПРОДОЛЖИТ ВИСЕТЬ В ФОНЕ (continues running in background)
Когда вы закончите, не забудьте убить ранее начатый процесс `ssh` (который выпал на задний план из-за -f -N).
-f Requests ssh to go to background just before command execution. This is useful if ssh is going to ask for passwords or passphrases, but the user wants it in the background. This implies -n.
-N Do not execute a remote command. This is useful for just forwarding ports.
- Обратный «туннель» через B в A
Не всегда работает:
```bash
A$ ssh -f -N -R 4567:localhost:22 B
(now you can reach A from B, by using localhost:4567)
B$ scp -P 4567 localhost:thefile C:destination
```
### Шпаргалки:
```bash
scp -v web.domain.com:/tmp/test-from-web wmail.domain2.com:/tmp/
```
## Используемые или важные ключи.
```bash
-3 Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts. Note that this option disables the progress meter.
-P - Указывает порт ssh удаленного хоста.
-p - Сохраняет время изменения и доступа к файлам.
-q - Используйте эту опцию, если вы хотите отключить индикатор выполнения и сообщения, не связанные с ошибками.
-C- Эта опция заставляет scpсжимать данные при их отправке на целевую машину.
-r- Эта опция указывает scpрекурсивное копирование каталогов.
-R Specifies that connections to the given TCP port or Unix socket on the remote (server) host are to be forwarded to the given host and port, or Unix socket, on the local side.
```
- При передаче данных с помощью `scp` шифруются и файлы, и пароль, поэтому любой, кто отслеживает трафик, не получит ничего конфиденциального.
- Команда `scp`работает поверх `ssh`, поэтому для аутентификации в удаленных системах требуется ключ ssh или пароль.
- Двоеточие ( `:`) позволяет `scp`различать локальные и удаленные местоположения.
- Чтобы иметь возможность копировать файлы, у вас должны быть как минимум разрешения на чтение исходного файла и разрешение на запись в целевой системе.
- Будьте осторожны при копировании файлов с одинаковым именем и расположением в обеих системах, это `scp`приведет к перезаписи файлов без предупреждения.
- При передаче больших файлов рекомендуется запускать `scp`команду внутри сеанса [screen](https://linuxize.com/post/how-to-use-linux-screen/) или [tmux](https://linuxize.com/post/getting-started-with-tmux/) .
### Файлы