Ответ 1
ssh -t 'command; bash -l'
выполнит команду, а затем запустит оболочку входа в систему.
Я пытаюсь найти команду UNIX или bash для запуска команды после подключения к ssh-серверу. Например:
ssh [email protected] "tmux list-sessions"
Приведенный выше код работает, он перечисляет сеансы, но затем немедленно отключается. Помещение его в sshrc на стороне сервера работает, но мне нужно иметь возможность вводить его на стороне клиента. Я хочу иметь возможность запускать команду, она входит в систему, открывает окно, затем запускает команду, которую я установил. Ive попробовал
[command] | ssh [email protected]
ssh [email protected] [command]
ssh [email protected] "[command]"
ssh -t [email protected] [command]
ssh -t 'command; bash -l'
выполнит команду, а затем запустит оболочку входа в систему.
Вы можете использовать параметр командной строки LocalCommand
, если включена опция PermitLocalCommand
:
ssh имя_пользователя @hostname -o LocalCommand = "tmux list-sessions"
Подробнее о доступных параметрах см. на странице руководства ssh_config
.
Это не совсем то, что вы ищете, но я нашел его полезным в подобных обстоятельствах.
Недавно я добавил следующее к моему $HOME/.bashrc
(что-то подобное должно быть возможно с оболочками, отличными от bash):
if [ -f $HOME/.add-screen-to-history ] ; then
history -s 'screen -dr'
fi
Я держу сеанс screen
, запущенный на одном конкретном компьютере, и у меня были проблемы с ssh
подключениями к этой машине, которая отбрасывалась, требуя, чтобы я повторно запускал screen -dr
при каждом повторном подключении.
С этим добавлением и после создания этого (пустого) файла в моем домашнем каталоге я автоматически получаю команду screen -dr
в моей истории, когда запускается моя оболочка. После повторного подключения я могу просто набрать Control-P Enter, и я вернусь на сеанс экрана, или я могу игнорировать его. Он гибкий, но не совсем автоматический, и в вашем случае это проще, чем набрать tmux list-sessions
.
Возможно, вы захотите сделать команду history -s
безусловной.
Это требует обновления вашего $HOME/.bashrc
в каждой из целевых систем, что может или не может сделать его непригодным для ваших целей.