У меня есть ряд программных файлов, загруженных в мой подкаталог ~/Downloads
на моем персональном компьютере. Я также использую Bash для удаленного подключения к компьютеру с помощью ssh
.
Можно ли передать этот файл через ssh
удаленный компьютер?
this file
) и нескольких файлов (a series of software files
), лучшее решение зависит от того, есть ли у вас один файл или несколько файлов.Ответы:
Вы можете использовать
scp
для этой цели. Это безопасный способ передачи файлов по протоколу SSH.Например, чтобы скопировать файл с именем
yourfile.txt
из~/Downloads
к удаленному компьютеру, используйте:Вы можете увидеть больше примеров здесь .
источник
rsync
может работать так же, теперь, когда я думаю об этомscp
выше,rsync
и это должно работать просто отлично.rsync
для всего, даже для отдельных файлов, потому что это «просто работает» в простых случаях и может быть гораздо более эффективным в других случаях. При использовании либоscp
илиrsync
на что - либо уже не сжатом и / или зашифрованном, не забудьте включить опцию сжатия на (-C
дляscp
,-z
или--compress
дляrsync
). На самом деле я включаю его по привычке - очень редко можно встретить обстоятельства, когда это когда-либо замедляет работу (возможно, если вы используете медленное устройство с низким энергопотреблением и ограниченной мощностью CPI, например, RPI).Хотя
scp
это явно правильный инструмент для этого, если по какой-то причине вы не можете его использовать, вы можете сделать что-то вроде следующего с вашего локального компьютера, чтобы скопировать, скажем, структуру каталогов на удаленный компьютер:Это создаст
tar
текущий каталог на локальном компьютере и запишет тот,tar
вstdout
который затем будет переданssh
команда, где он выполнит удаленную команду, чтобы распаковать файл, из которого он читаетstdin
Отредактировано, чтобы отразить комментарий Дитриха Эппа о
-f -
том, что он является настройкой по умолчанию как для конца создания, так и для извлечения, поэтому нет необходимости указывать явно.источник
-C basedir
аргумент дляtar
извлечения чего-то, кроме вашего домашнего каталога, если вы делаете это.Если вы хотите сделать это чаще, чем в редких случаях, я бы посоветовал монтировать удаленную файловую систему,
sshfs
если вы используете Unix-подобный, который поддерживает FUSE (Linux, * BSD, Mac OS X). Создайте каталог под своим домашним каталогом, скажем, ~ / remote-server:Затем смонтируйте удаленную файловую систему с
sshfs
. Замените «yourserver.com» на имя хоста вашего удаленного компьютера, а «имя удаленного каталога» на каталог, который вы используете в удаленной системе.Как только это будет сделано, удаленный каталог станет частью вашей файловой системы, и вы сможете использовать все свои обычные инструменты, включая
cp
:Если вы еще не
sshfs
установили, вы сможете установить его на свой компьютер, используя менеджер пакетов (ищите пакеты с именамиsshfs
илиfuse-sshfs
). Для получения дополнительной информации вы можете прочитать учебник онлайн .Это, кстати, мой любимый способ управления файлами на удаленных серверах. Я обычно сохраняю один рабочий сервер и два сервера разработки, смонтированные таким образом, и использую мой обычный рабочий процесс просмотра файлов с ними.
источник
-o idmap={none,user,file},gid=<remote_user_group_ID>,allow_other
и-C
для сжатия, если плохая пропускная способность. Как только все заработает, я лично добавлю псевдонимы для команд, чтобы быстро смонтировать удаленные файловые системы через ssh. @Benjamin_Staton Я бы не использовал здесь sudo или root, по крайней мере без надлежащего отображения пользователей / групп.Во-первых, нет реальной разницы между
scp
(копироватьssh
) иrsync
.Последующие запуски выиграют, если rsync не будет копировать файлы, которые уже существуют.
-a
для всех файлов-v
для многословия-H
для "просто выяснить символические ссылки и делать правильные вещи"Другие полезные флаги включают в себя:
--delete
удалить файлы в месте назначения, которые больше не существуют в источнике.--dry-run
для тестирования - очень удобно в сочетании с--delete
.Это будет использовать
ssh
ключи также для входа без пароля, если они настроены.В конце прогона
rsync
расскажет вам, во сколько раз это было быстрее, если снова сделать простую копию.источник
-H
на самом деле для жестких ссылок, он останавливает отправку одного и того же контента дважды или более, когда он связан более чем в одном месте в структуре исходного каталога (но может сделать процесс менее эффективным для больших структур каталогов). это не влияет на символические ссылки, но некоторые опции, включенные-a
/--archive
действительно, влияют на то, как обрабатываются символические ссылки .Добавить к ответам выше. Иногда я не совсем уверен насчет удаленного пути. В этих случаях я использую,
sftp
чтобы сначала перейти к требуемому местоположению, затем использовать get или put, чтобы фактически загрузить или загрузить файл.Если вы также хотите, чтобы что-то всегда было синхронизировано, и даже хотите локально выполнить какой-то файл, расположенный на удаленной машине, это
sshfs
прекрасно работает.источник
Я делаю что-то очень похожее с ssh. Я создал специальный инструмент сборки для Visual Studio, и в основном VS запускает команду ssh, которая копирует мой код на целевой компьютер, а затем компилирует его на этом целевом компьютере.
Обратите внимание на использование одинарной кавычки и точки с запятой. Первый инкапсулирует ваши команды для hostB через ssh, а второй позволяет вам запускать несколько системных команд hostB в одной команде ssh из hostA.
Чтобы это работало, вам нужно настроить ssh-ключи на вашем стартовом компьютере, чтобы вы могли быть userA @ hostA и войти в систему hostB как userB. Процесс создания открытого ключа ssh для userA @ hostA хорошо документирован. Если вы не создадите открытый ключ на hostA для userA и скопируете этот ключ на hostB как userB, то вам придется каждый раз вводить пароль - что разрушает радость автоматизации.
источник