Назад | Перейти на главную страницу

Как можно отправлять команды на «внутренний» ssh-сеанс?

Представьте себе сценарий, в котором я вошел на сервер (который мы назовем "Уоллес") с моей локальной машины, а оттуда я ssh на другой сервер (который мы назовем «Громит»):

laptop ---ssh---> Wallace ---ssh---> Gromit

Затем сеанс ssh от Уоллеса до Громита зависает, и я хочу его убить. Если я войду ~. чтобы убить ssh, он убивает сеанс ssh от моего ноутбука до Уоллеса, потому что ~ перехватывается этим сеансом ssh, и . воспринимается как команда на завершение сеанса. Как отправить команду сеансу ssh между Уоллесом и Громитом? Как мне убить свой "внутренний" ssh?

Добавьте еще одну тильду (например, введите ~~.). Каждую последующую тильду съедает самый внешний сеанс ssh, который еще не съел ни одного, но если следующий символ - другая тильда, он передается в следующий сеанс в.

Если от громита1, вы отправили ssh на третий хост (назовем его wensleydale), затем ~~~. сбросит сеанс в wensleydale и вернет вас к приглашению на gromit.

1 И какой это замечательный сервер; как часто я слышал реплику разработчика "взлом хост, громит"?

Вы можете вводить произвольные команды и перехватывать вывод внутренней оболочки в переменную.

export output=`echo some_cmd | ssh user@host |  echo some_cmd2 | ssh user2@host2`