Как включить автозаполнение для удаленных путей при использовании scp?

37

Я удаленно скопировал файл на свой ноутбук, используя:

scp someFile USER@192.168.178.32:/home/USER/put/it/some/where/oh/damn/you/here

Я хочу иметь возможность автозаполнения удаленного пути, нажав вкладку.

k0pernikus
источник
1
Это включено rsync, что, на мой взгляд, намного превосходитscp
Марко Чеппи
3
По умолчанию он включен в zsh.
Стефан Гименес
3
Это включено scpтакже, по крайней мере, здесь работает. Вам нужен ssh-ключ, уже добавленный в ssh-agent.
энзотиб

Ответы:

24

Убедитесь, что вы включили модное автозаполнение. Во многих дистрибутивах это означает, что вам ~/.bashrcнужно содержать . /etc/bash_completion.

Вам необходимо настроить аутентификацию без пароля, т.е. с ключом, который уже загружен ssh-agent.

Установка SSH-соединения происходит медленно, поэтому вы можете значительно ускорить завершение, установив соединение раз и навсегда и использовав его впоследствии. Относительно сложный способ сделать это состоит в том, чтобы открыть главное соединение SSH с ssh -N -M target-hostпосле установки главного / подчиненного соединения в ~/.ssh/config; см Несколько сессий SSH в одной команде инструкции (вам нужно ControlMasterи ControlPathопция).

Простой способ - смонтировать удаленную файловую систему через SSHFS и использовать cpс обычным завершением оболочки.

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here
Жиль "ТАК - прекрати быть злым"
источник
Похоже, что-то есть в /etc/bash_completionисточнике ~/.bash_completion. Я хочу иметь возможность использовать эту функцию на удаленном сервере, на который я не могу писать, /etc/а его нет /etc/bash_completion(хотя есть /etc/bash_completion.d/. Есть ли версия, которую можно было бы безопасно запускать из моего домашнего каталога? Есть хотя бы одна ссылка на ~ / .bash_completion, так что, боюсь, я пропускаю больше, и может быть циклический цикл или что-то еще, что может вызвать ошибки.
redbmk
7

Все, что мне нужно было сделать, это добавить свой открытый ключ на удаленный компьютер:

cat ~/.ssh/id_rsa.pub | ssh USER@192.168.178.32 "cat - >> ~/.ssh/authorized_keys"

А теперь scpвкладка завершена.

Посмотрите здесь, если вам нужно сначала настроить ключи.

k0pernikus
источник
7
Это то ssh-copy-id, для чего, плюс он будет обрабатывать права доступа к файлам для вас.
Гленн Джекман
2

Вы можете переключиться на lftp вместо использования scp. Это дает вам хороший согласованный интерфейс для передачи файлов через ftp, sftp и ssh, включая автозаполнение, которое вы ищете, и многое другое (например, подстановочные знаки).

lftp fish: // user @ machine

открывает соединение через ssh, как вы делали выше с помощью scp. Многие машины также поддерживают sftp: //, что еще лучше в моем опыте.

fschmitt
источник
0

Как сказал @Giles , убедитесь, что вы правильно настроили автозаполнение, чтобы на вашем компьютере был ключ ssh.

Добавление этой конфигурации к моему ~/.ssh/configогромному различию в скорости.

Host *
 ControlMaster auto
 ControlPath ~/.ssh/master-socket/%r@%h:%p
 ControlPersist 10s

Это создаст главное соединение для каждого хоста.

Постоянные 10 секунд дадут вам некоторое время для просмотра каталога, прежде чем соединение будет автоматически закрыто.

Без сохранения вам придется воссоздать соединение, и это замедлит завершение вашей вкладки.

пример

~$ scp mymachine:~/pa TAB

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to TAB

~$ scp mymachine:~/path/to/file TAB

Гарри
источник