Обычно, если Вы передаете команду ssh как так
ssh me@example.com 'some-command.sh'
Вы получаете неинтерактивную сессию и выходы ssh, как только команда (или сценарий, или безотносительно) выполняется. Как я могу получить интерактивную сессию и все же выполнить команду, которую я указал от своей локальной машины. Например, я хотел бы смочь открыть экран и перезапустить определенную экранную сессию:
ssh me@example.com 'screen -r 12345'
но это не позволяется, возвращение ошибки "Должно быть подключено к терминалу". который я предполагаю, что средства по существу "должны назвать эту команду от интерактивной оболочки".
Как другой пример, я использую тонну машин на работе, которые часто требуют, чтобы я использовал общую учетную запись, чтобы иметь права сделать определенные вещи (да, я знаю: плохая идея, но не обвиняет меня, я не установил вещи тот путь), и у них обычно есть ksh как оболочка по умолчанию. Я хотел бы войти в систему, переключиться на удар (или zsh) и получить .bash_profile моей собственной учетной записи (или .zshrc). Это было бы легко, если я мог бы установить интерактивную ssh сессию и передать команду удаленной машине для выполнения после входа в систему.
Я имею очень kludgey (и непротестированный) решение в памяти, что я отправлю, но я надеюсь, что кто-то знает лучший путь.
ОБНОВЛЕНИЕ: для тех, кто не понял это, я не планирую сделать, все это вручную, таким образом говоря мне открыть интерактивную сессию и затем сделать это вручную ничего на самом деле не решает.
2-е ОБНОВЛЕНИЕ: попытаться еще раз разъясниться: я пытаюсь выполнить (произвольные) команды на сервере (программно указанный на клиенте), но затем иметь интерактивную сессию, открытую, который затронут чем-либо сделанным теми программными командами.
Это - kludgey, и непротестированный, но я думаю, что он должен работать.
Создайте названный сценарий (например). дистанционный стартер, который берет заключенный в кавычки аргумент после аргумента user@host:
remote-starter user@example.com 'some-command.sh arg1 arg2'
Этот сценарий должен сначала сохранить заключенную в кавычки команду (без кавычек) в названном файле (например). .onetime
на удаленной машине, и затем выполненный регулярная команда ssh, на этот раз не передавая команды, которая будет выполнена на удаленной машине. (При выполнении ssh user@example.com из сценария, это может работать для выполнения должностного лица ssh user@example.com.)
Чтобы это работало, удаленная машина должна получить .onetime
от его .bash_profile или .zshrc или что бы то ни было. После выполнения .onetime
, это должно удалить .onetime
, таким образом, файл не выполняется в следующий раз, когда Вы делаете регулярный вход в систему.