LINUX.ORG.RU

Вопрос по терминологии: передача файлов по SSH

 


1

3

Если мне нужно отправить файлы через SSH, то возможны только способы отправки используя протоколы SFTP и SCP, которые работают поверх SSH? Сам по себе же SSH не умеет отправлять файлы?

ssh-copy-id утилита работает через scp?



Последнее исправление: KRex (всего исправлений: 1)

Если мне нужно отправить файлы через SSH, то возможны только способы отправки используя протоколы SFTP и SCP, которые работают поверх SSH? Сам по себе же SSH не умеет отправлять файлы?

Да. Причем SCP активно выпиливают, по весомым причинам.

ssh-copy-id утилита работает через scp?

Узнаём, что

ssh-copy-id is a script […]

открываем

nano `which ssh-copy-id`

и видим, что если доступен SFTP - используется SFTP, если нет, то cat >> authorized_files.

token_polyak ★★★★
()
Ответ на: комментарий от Pinkbyte

Зачем сабшелл ((...))? В принципе Эскобар.sh, но добавляет путаницы в дерево процессов (админу, не дереву). Но если админ — дерево (или банально пьян), то он такую конструкцию сочинить не сможет, зато легко убьёт "какой-то левый шелл".

И да, это уже не «сам по себе». ☺

mord0d ★★★★★
()
Последнее исправление: mord0d (всего исправлений: 1)
Ответ на: комментарий от mord0d

Зачем сабшелл ((...))?

Чтобы не менять директорию в текущем шелле

P.S. Тред не читай, сразу отвечай :-)

Pinkbyte ★★★★★
()
Последнее исправление: Pinkbyte (всего исправлений: 1)
Ответ на: комментарий от Pinkbyte

Чтобы не менять директорию в текущем шелле

Для tar(1) есть опция -C (--cd, --directory). Или в GNU tar даже такой банальщины не завезли? Вон, @firkax в курсе.

// И @slowpony тоже.

А ещё давно (ОЧЕНЬ давно!) изобрели pushd/popd. В связке с cp+mv+rm+mkdir+ln оно способно даже заменить Midnight Commander!

P.S. Тред не читай, сразу отвечай :-)

Ткни текстом где я пишу ну совсем не в тему?


Твой пример очень сложен…

(cd /source/dir && tar cpf -) | ssh user@remote-host 'mkdir -p /dest/dir && tar xpf - -C /dest/dir'

Раскладывается в следующий код:

sh <<-EOF
  cd /source/dir
  if test $? -ne 0; then
    exit
  fi
  if ! tar -c -p -f /tmp/sources.tar; then
    rm /tmp/sources.tar
  fi
EOF
if test -r /tmp/sources.tar; then
  scp /tmp/sources.tar user@remote-host:/tmp/sources.tar
fi
ssh user@remote-host <<-EOF
  if test -r /tmp/sources.tar; then
    logout
  fi
  mkdir -p /dest/dir
  if test $? -ne 0; then
    logout
  fi
  if tar -x -p -f /tmp/sources.tar; then
    rm /tmp/sources.tar
  fi
EOF

А потом набигают новички, которые взяли на вооружение подобные практики без их понимания, и жалуются что они всё сломали и слёзно просят помочь им всё починить.

mord0d ★★★★★
()
Ответ на: комментарий от firkax

Да, но нет:

tar: Следующие параметры используются после обязательных аргументов в режиме создания или обновления архива. Эти параметры зависят от места и влияют только на аргументы, после которых указываются. Размещайте их правильно.
tar: -C «source/dir» не учитывается

Update: переставил -C source/dir ПЕРЕД -c - заработало как надо.

Спасибо, раньше как-то думал что -C работает только при распаковке, возможно раньше tar не предупреждал про игнорирование -C, если оно указано при сжатии ПОСЛЕ всех других аргументов

Pinkbyte ★★★★★
()
Ответ на: комментарий от mord0d

Мой пример основан на tar-е 10-летней давности(потому что я не каждый день слежу чего там нового появилось в опциях утилиты, если передаваемый аргументы не вызывают ошибок/предупреждений), который, как я понимаю(смотри мой коммент выше) параметр -C кушал при сжатии, но просто игнорировал.

Твой пример очень сложен

А pushd/popd - это конечно верх простоты. Кстати в однострочнике их один хрен придеться либо в сабшелл пихать(но тогда уж лучше cd), либо обрамлять однострочник. Что тоже будет выглядеть нифига не просто :-)

Вот рабочая -C у tar - это правильный путь.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

А pushd/popd - это конечно верх простоты. Кстати в однострочнике их один хрен придеться либо в сабшелл пихать

 % pwd
/usr/home/mord0d
 % pushd ~/proj/ports/x11
~/proj/ports/x11 ~ 
 % pwd
/usr/home/mord0d/proj/ports/x11
 % pushd /etc
/etc ~/proj/ports/x11 ~ 
 % pwd
/etc
 % popd
~/proj/ports/x11 ~ 
 % pwd
/usr/home/mord0d/proj/ports/x11
 % popd
~ 
 % pwd
/usr/home/mord0d

Причём возврат (popd) работает с любой вложенностью переходов, в отличие от одноуровневого $OLDPWD в Bourne Shell.

либо обрамлять однострочник

Зачем? Тебе так сложно потом сделать popd? Ну допиши его в хвост однострочника: pushd /source/dir && ... && popd.

Вообще, не понимаю тех, кто трясётся над $PWD. В чём смысл?

Вот рабочая -C у tar - это правильный путь.

Ну… для c — да, для x… тут спорно и очень сильно зависит от задачи.

mord0d ★★★★★
()
Ответ на: комментарий от mord0d

За ликбез по pushd/popd конечно спасибо(кому-нибудь да пригодиться), но я их уже лет 10 как применяю везде где надо. В моём примере мне cd привычнее, потому что как минимум короче писать. Лишний сабшелл не потратит настолько уж много ресурсов и дебаг тоже не затруднит, т.к. в сабшелле не километровый скрипт с переменными(достать которые из сабшелла - задача в духе Mission Impossible).

Вообще, не понимаю тех, кто трясётся над $PWD. В чём смысл?

Смысл в продолжении работы там, где ты находился до этого. Не, если у тебя открыто меньше 5 терминалов, то оно конечно не надо. Но это не мой случай.

Pinkbyte ★★★★★
()
Ответ на: комментарий от Pinkbyte

За ликбез по pushd/popd конечно спасибо(кому-нибудь да пригодиться)

Ну, я старался не столько для тебя (“You can’t teach an old dog new tricks.”), сколько для новичков. ☺

В моём примере мне cd привычнее, потому что как минимум короче писать. Лишний сабшелл не потратит настолько уж много ресурсов и дебаг тоже не затруднит, т.к. в сабшелле не километровый скрипт с переменными(достать которые из сабшелла - задача в духе Mission Impossible).

Ты смотришь на ситуацию с высоты своего опыта, не учитывая что это прочитают новички и станут слепо применять, не разобравшись как оно работает, работает же… до определённого момента, и когда этот момент настанет, он придёт просить помощи, и очень хорошо если он банально распаковал кучу файлов куда не надо.

Вообще, не понимаю тех, кто трясётся над $PWD. В чём смысл?

Смысл в продолжении работы там, где ты находился до этого.

С pushd ты не теряешь PWD, и всегда можешь вернуться туда, где был, с помощью popd. Смысл в том что не нужно вбивать $OLDPWD лапками, просто popd, и этих popd может быть до конца стека (dirs покажет текущий стек).

Не, если у тебя открыто меньше 5 терминалов, то оно конечно не надо. Но это не мой случай.

У меня их обычно открыто немало, плюс в некоторых открыт tmux с пачкой табов/сплитов. В каждом терминале изначально сделано cd, а дальше уже pushd/popd:

 % popd
popd: Directory stack empty.
 % pwd
~/proj/ports/x11

Ага, в этом терминале я работаю с портами…

И нет путаницы, что у тебя открыто два терминала с одной дирой и "куда-то подевался" терминал с другой дирой. Это не создаёт путаницу, оно её решает!

mord0d ★★★★★
()

Краткий ответ - умеет. Более того в mc и реализован такой способ. Файл можно скопировать через dd cat, tar и т.д. послав его содержимое через ssh.

einhander ★★★★★
()