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

  • откройте каталог удаленного проекта в моем файловом менеджере, используя sftp
  • редактировать некоторые файлы
  • запустите make remote , который подключается к удаленной машине через ssh и запускает make там:

    ssh $(HOST) cd $(DIRECTORY) \; make

  • запустите make get , который передает двоичный файл через scp:

    scp $(HOST):$(DIRECTORY)/build/$(FILE) .

  • проверить двоичный файл и повторить

Проблема в том, что удаленный компьютер выполняет только аутентификацию по паролю, поэтому мне приходится вводить пароль дважды в каждом цикле. Разве я не могу собрать и скачать в одном сеансе ssh ?

5 ответов5

3

Я думаю, что совместное использование сессии SSH было бы полезно в этой ситуации. Он позволяет вам открывать несколько сеансов через одно соединение, поэтому вам нужно будет ввести пароль только один раз. В вашем .ssh/config:

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

Таким образом, вы можете открыть один терминал, SSH на вашем сервере, и запустить свой редактор. Затем вы можете открыть другой терминал, SSH, на тот же сервер, используя общее подключение, и запустить оттуда make и scp. Больше информации:

1

Смонтируйте удаленную сторону с помощью sshfs и работайте «локально». После запуска удаленного make вы увидите результат в вашей локальной точке монтирования без явного копирования.

0

Я хочу, чтобы ответ Роберто был принят, но все же делюсь тем, что я в итоге сделал:

Прежде всего, я использовал предложение Роберто, чтобы включить совместное использование сессии: в .ssh/config:

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

Кроме того, я монтирую удаленную файловую систему, используя sshfs (все в make-файле):

mount:
    sshfs $(HOST):$(DIRECTORY) $(MOUNTPOINT)

unmount:
    fusermount -u $(MOUNTPOINT)

Для фактических целей строительства:

make:
    ssh $(HOST) cd $(DIRECTORY) \; make

clean:
    ssh $(HOST) cd $(DIRECTORY) \; make clean

Поскольку sshfs поддерживает соединение ssh открытым, мне вообще не нужно вводить пароль во время работы, и для двоичного файла не требуется никакой специальной обработки (поэтому я пропускаю цель install ). Дополнительным преимуществом простой точки монтирования является то, что я могу использовать git, как и в любом обычном проекте.

0

Хотя возможно объединение двух удаленных задач в два сеанса, в этом случае можно использовать sftp-монтирование удаленной файловой системы. Вместо использования scp вы можете использовать gvfs-move для make get:

gvfs-move sftp://$(HOST)$(REMOTE_HOME)/$(DIRECTORY)/build/$(FILE) .

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

0

Вы можете настроить команду make для чтения пароля в одной переменной, а затем использовать sshpass для двух соединений.

Что-то вроде:

read -p "Enter your password: " PASSWORD
sshpass -p $PASSWORD ssh user@host 'cd '$(DIRECTORY)' \; make'
sshpass -p $PASSWORD scp $(HOST):$(DIRECTORY)/build/$(FILE) .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .