tmux new-window ssh на удаленный хост, затем выполните команду и оставайтесь в системе
Я использую Tmux на поле для прыжков. Я пытаюсь автоматизировать некоторые распространенные сценарии. Как я могу сделать следующее?:
- создать новое окно
- SSH к удаленному хосту
- выполнить некоторые команды на удаленном хосте (то есть: cd и dot-slash что-то)
- оставаться в системе
Я могу сделать это с помощью SSH:
ssh -t root@2.158.0.10 "cd ~adarias/duncans/ServiceAgent/tests; bash -l -c 'mocha config_tests.js'; bash -l"
но не с tmux new-window:
tmux new-window -t mosdev -d -n 'debug & test' 'ssh -T root@2.158.0.10 < .mosdev/scripts/test_config.sh; bash -l'
Я поместил команды оболочки в отдельный файл, потому что у меня были проблемы с вложенными кавычками, которые я не мог понять, как обойти это.
.mosdev / скрипты /test_config.sh:
#!/bin/bash
cd ~adarias/duncans/ServiceAgent/tests; bash -l -c 'mocha config_tests.js'; bash -l
Сеанс ssh с удаленным хостом не остается открытым. Несмотря на то, что новое окно появляется, я получаю ответное приглашение на поле перехода.
Итак, что мне здесь не хватает? Как я могу заставить эту сессию оставаться открытой?
1 ответ
Я считаю, что проблема заключается в использовании ssh
команда.
С конца AUTHENTICATION
раздел в man ssh
:
Сеанс завершается, когда команда или оболочка на удаленной машине завершаются, и все соединения X11 и TCP закрыты.
Так что я думаю, что вы видите ssh
ожидаемое поведение.
В качестве обходного пути попробуйте использовать tmux send-keys
сообщить окну о необходимости входа в систему и затем выполнить ваш скрипт:
tmux new-window -a -d -t mosdev -n debug-test
tmux send-keys -t mosdev:debug-test "ssh root@2.158.0.10" C-m
tmux send-keys -t mosdev:debug-test "cd ~adarias/duncans/ServiceAgent/tests; mocha config_tests.js" C-m
Пара заметок:
- Я изменил имя окна на что-то без пробелов.
C-m
это ключ возврата.
Я заметил, что на момент моего ответа этому вопросу два месяца. Вы уже решили это? Если так, как ты?