Як включити автодоповнення для віддалених шляхів при використанні scp?


37

Я віддалено скопіював файл на свій ноутбук, використовуючи:

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

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


1
Це ввімкнено для rsync, що, на мій погляд, набагато перевершуєscp
Марко Чеппі

3
Він увімкнено за замовчуванням у zsh.
Стефан Гіменез

3
Це ввімкнено scpтакож, принаймні, він працює тут. Вам потрібен ключ-ssh, який уже додано до ssh-агента.
enzotib

Відповіді:


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вкладка завершується.

Подивіться тут, якщо вам потрібно спочатку налаштувати свої ключі.


7
Це те, що ssh-copy-idдля цього, плюс воно буде обробляти дозволи для файлів для вас.
glenn jackman

2

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

lftp fish: // user @ machine

відкриває з'єднання через ssh, як ви робите вище з scp. Багато машин підтримують sftp: // теж, що є ще приємнішим у моєму досвіді.


0

Як @Giles сказав , переконайтеся, що ви автоматично виконали налаштування, чи є у вас ключ ssh на машині.

Додавання цієї конфігурації до моєї ~/.ssh/configзмінило швидкість.

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

Це створить головне з'єднання для кожного хоста.

Продовження 10-х років дає деякий час, щоб побачити каталог, перш ніж з'єднання буде автоматично закрито.

Без збереження вам потрібно буде відновити з'єднання, і це сповільнить поповнення вкладки.

Приклад

~$ scp mymachine:~/pa ТАБ

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to ТАБ

~$ scp mymachine:~/path/to/file ТАБ

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.