Непрямой ssh, соединение закрыто после одной команды
Я пытался выполнить несколько команд через несколько SSH, в основном:
ssh -t host1 ssh -t host2 ssh -t host3 'cmd1; cmd2; Cmd3'
Я хочу выполнить все команды на конечном хосте (host3). Но что произойдет, если я воспользуюсь приведенной выше строкой, то соединение с host3 и host2 закрылось сразу после "cmd1;"
Например, если я использую имя хоста для cmd1, cmd2 и cmd3, результат будет
host3
Соединение с host3 закрыто.
Соединение с host2 закрыто.
host1
host1
Соединение с host1 закрыто.
Если я использую двойные кавычки следующим образом
ssh -t host1 "ssh -t host2 ssh -t host3 'cmd1; cmd2; cmd3'"
или же
ssh -t host1 ssh -t host2 "ssh -t host3 'cmd1; cmd2; cmd3'"
Я получаю вывод:
host3
Соединение с host3 закрыто.
host2
host2
Соединение с host2 закрыто.
Соединение с host1 закрыто.
Может ли кто-нибудь объяснить это мне? и как я могу получить все команды, выполняемые на host3
1 ответ
Все это занимает много цитат:
ssh -t host1 'ssh -t host2 "ssh -t host3 '"'"'cmd1; cmd2; cmd3'"'"'"'
То, что я сделал здесь, было просто взять вашу последнюю команду и добавить ' вокруг него. Однако что-то еще должно быть соответствующим образом скорректировано. Любой ранее существующий ' внутри той части, которую я положил ' вокруг должно быть заменено '"'"'
Причина замены ' с '"'"' работает это:
- Первый
'завершает строку в кавычках. - Первый
"начинается новая строка в кавычках" - Середина
'не интерпретируется оболочкой, а только как литерал. - Последний
"заканчивает строку в кавычках" - Последний
'начинается новая строка в кавычках. - Три строки автоматически объединяются оболочкой.