Как скопировать (или перемещение) файлы с удаленной машины на локальную машину?

Я SSH туннелировал с моей локальной машины Ubuntu на удаленную машину Ubuntu и я хочу копировать/перемещать файлы от удаленной Ubuntu до локальной.

Я должен сделать это из сессии SSH (т.е. из удаленной Ubuntu).

Они не работали:

scp [remote-source] [local-destination] # Which is actually:
scp /home/user/files_to_depart/file1.txt /home/user/files_that_arrived/file1.txt

Как это может иначе быть сделано?

6
задан 3 October 2018 в 12:44

3 ответа

ответ nullmeta абсолютно действителен, и возможно nullmeta отредактирует для предоставления разъяснения, которое Вы ищете. Я отправляю разное решение в целом для составления ситуации, где это может быть трудно из-за структуры сети (думайте брандмауэр NAT) только к ssh назад в локальную систему.

Говорят, что у Вас есть два компьютера, ComputerA и ComputerB. ComputerA является Вашей локальной рабочей станцией. ComputerB является удаленной машиной, к которой можно получить доступ через ssh.

Сценарий 1: Если ComputerA не позади брандмауэра NAT

, Это - быстрое и легкое решение, объединяясь scp и ssh (scp выполняет безопасную копию с помощью ssh протоколы). Это требует, чтобы у Вас был ssh сервер (и клиент) установленный на обоих концах (computerA и computerB).

Для использования этого решения работайте из ComputerB:

scp /path/to/file/on/ComputerB ComputerAUser@ComputerA:/path/to/dump/file/on/ComputerA

Сценарий 2: Если бы ComputerA позади брандмауэра NAT

В этом сценарии, необходимо было бы обычно настраивать перенаправление портов в брандмауэре NAT. Однако у Вас не может всегда быть доступа для создания этих видов изменений. В этом случае можно настроить туннель ssh от ComputerA-> ComputerB такой, он может туннелировать обратные соединения также.

При установлении соединения SSH ComputerA-> ComputerB, сделайте так с-R опцией следующим образом. ssh ComputerBUser@ComputerB -R 2222:localhost:22 то, где ComputerBUser имя пользователя для учетной записи на аутентифицируемом ComputerB и 2222, франко-порт на ComputerB. Мы будем использовать этот порт для обратного туннеля назад к ComputerA от ComputerB.

Теперь от ComputerB, можно дать scp команду следующим образом для копирования файлов с ComputerB-> ComputerA, где ComputerAUser имя пользователя на ComputerA:

scp -P 2222 /path/to/file/on/ComputerB ComputerAUser@localhost:/path/to/drop/file/on/computerA

, Что происходит здесь? Похоже, что мы просто говорим ComputerB передавать файл обратно себе, потому что мы передаем localhost вместо ComputerA. Мы действительно говорим scp пасовать назад файл к ComputerB, но портировать 2222. Все соединения с портом 2222 на ComputerB передаются для портирования 22 (значение по умолчанию ssh порт) на ComputerA. Таким образом, путем туннелирования назад по существующему соединению SSH, не имеет значения, что ComputerA находится позади брандмауэра NAT.

<час>

Сценарий 3: выполните копию файла с ComputerA

Или вместо того, чтобы пытаться сделать это от ComputerB, можно просто выполнить команду scp из ComputerA.

scp ComputerBUser@ComputerB:/path/to/file/on/ComputerB /path/to/dump/file/on/ComputerA
9
ответ дан 23 November 2019 в 07:22

Не будучи на сессии SSH Вы хотели бы использовать

scp user@remotehost:/file/to/copy /local/destination

, Если Ваша локальная машина имеет выполнение sshd и открытый порт, в то время как на ssh сессии Вы можете

scp /remote/file user@localmachine:/destination/file

, Эта ссылка имеет некоторые обходные решения https://Редактирование unix.stackexchange.com/questions/2857/ssh-easily-copy-file-to-local-system

: я приношу извинения за любой беспорядок, самый легкий и самый эффективный путь будет открытием второго терминала, и выполнение первого scp управляют, чтобы я упомянул.

1
ответ дан 23 November 2019 в 07:22

Если Вам нужен простой способ просмотреть файловую систему удаленной машины и скопировать определенные файлы в локальную машину (и наоборот) можно использовать SSHFS.

Описание

  • От man sshfs:

    SSHFS (Безопасная Оболочка FileSystem) является файловой системой для Linux (и другие операционные системы с реализацией FUSE) способный к работе на файлах на удаленном компьютере, использующем просто безопасный вход в систему оболочки на удаленном компьютере. На локальном компьютере, где SSHFS смонтирован, реализация использует FUSE (Файловая система в Пространстве пользователя) модуль ядра. Практический эффект этого состоит в том, что конечный пользователь может беспрепятственно взаимодействовать с удаленными файлами, надежно подаваемыми по SSH так же, как если бы они были локальными файлами на его компьютере. На удаленном компьютере используется подсистема SFTP SSH.

  • От apt show sshfs:

    sshfs клиент файловой системы на основе Протокола передачи файлов SSH. Так как большинство серверов SSH уже поддерживает этот протокол, очень легко настроить: т.е. на стороне сервера там не имеет отношения. На стороне клиента, монтирующей файловую систему, так же легко как вхождение в сервер с ssh.

Установка

sudo apt install sshfs

В отличие от этого руководства я ничего не сделал другой на моей Ubuntu 16.04. Существует нет fuse группа пользователей.

Использование

  1. Создайте соответствующий каталог монтирования, например:

    mkdir ~/sshfs-mount-point
    
  2. Смонтируйте удаленный путь:

    • Смонтируйте удаленный путь, когда Вы использующий значение по умолчанию ssh настройки:

      sshfs user@IP:/remote/path ~/sshfs-mount-point
      
    • Смонтируйте удаленный путь, когда Вы использующий пользовательские ssh настройки:

      sshfs -o IdentityFile=/path/to/id_rsa,port=2222 user@hostname-or-IP:/remote/path ~/sshfs-mount-point
      
    • Смонтируйте удаленный путь, когда Вы правильно настроите ~/.ssh/config файл:

      sshfs hostname:/remote/path ~/sshfs-mount-point
      
  3. Размонтируйте удаленный путь. Существует два пути:

    • fusermount -u ~/sshfs-mount-point

    • sudo umount ~/sshfs-mount-point

Использование согласно вопросу

  • В то время как Вы - ssh, соединенный от машины к машине B, и Вы можете установить соединение SSH от B до A. Можно использовать один из вышеупомянутых подходов для монтирования папки от на B. Затем используйте cp, rsync или mc скопировать Ваши файлы.

  • В то время как Вы - SSH, соединенный от машины к машине B, и Вы не можете установить соединение SSH от B до A. Можно создать выделенную папку в машину B и скопировать файлы в ту папку. Смонтируйте эту папку на машине A и переместите эти файлы, где Вы хотите. Можно установить cronjob или колотить сценарий, которые справляются с этой задачей.

3
ответ дан 23 November 2019 в 07:22

Другие вопросы по тегам:

Похожие вопросы: