LINUX.ORG.RU
решено ФорумAdmin

Не могу выйти из ssh терминала. :)

 , ,


0

0

В общем вопрос опять как всегда достаточно идиотский.

Суть ситуации: Есть скрипт который выполняется на локальной машине. В нем команды в духе:

ssh user@111.111.111.111 'cd /3456/; mkdir 2345'

scp ./11111/* user@111.111.111.111:/3456/2345/

И тому подобные. Скрипт работает с несколькими серверами. Ряд команд без открытия живой консоли не выполняется. Связано с особенностями ПО которое этими командами ставится. В направлении того как победить это ПО и заставить работать без живой консоли, копал. Там достаточно глухо. А потому несколько строк в локальном скрипте выглядят так:

ssh user@111.111.111.111

Дальше через .bashrc автоматом запускается скрипт на удаленной машине и процесс продолжается. Все удаленные машины зацеплены через ключи и проблем с паролями нет.

Вся суть в том что надо регулярно из таких живых удаленных консолей выходить, для того чтобы локальный скрипт мог продолжиться. В общем заколупывает регулярно подглядывать за этим скриптом только для того чтобы набрать в очередной раз exit.

Я может туплю и решение есть очень простое, но я чего-то не нашел никакого. Может кто-то подать идею?

Ряд команд без открытия живой консоли не выполняется.

Попробуй ssh -t

Deleted
()
Ответ на: комментарий от AfterWork

Окей, а причину такого поведения этого софта ты выяснил? Советую тебе заняться этим, и если не получится его победить, то хотя бы написать сюда, чтобы тебе с этим помогли.

Deleted
()
Ответ на: комментарий от Deleted

Если бы выяснил причину, то победил-бы наверняка. Но суть в том что сейчас я точно не буду заниматься героической тратой времени на разбор тонкостей работы этого чудо-ПО со всеми его мелкими и крупными эмансипациями.

Вот когда платформу буду менять, тогда вероятнее всего сяду побеждать это чудо-ПО. А это не ранее чем через пару месяцев. Есть много другой работы. Так что совет не в кассу.

Да и вообще вопрос не об этом. Проблема про которую я спросил сама по себе интересная.

AfterWork
() автор топика
#!/bin/bash
command1 && \
command2 && \
command3 && \
exit

Каждая команда выполняется только после полного завершения предыдущей. Не оно?

Vsevolod-linuxoid ★★★★★
()
Последнее исправление: Vsevolod-linuxoid (всего исправлений: 1)
Ответ на: комментарий от anonymous

Внимательно не смотрел ansible, по диагонали сейчас прочитал описание. Но думаю что будет огород лишний как минимум, да и придется переписывать много. Сейчас это точно не в кассу. Но спасибо.

AfterWork
() автор топика
Ответ на: комментарий от Vsevolod-linuxoid

Ну это то с чего я начал эксперементировать. Не срабатывает exit. Причем непонятно почему не срабатывает. Похоже на то что exit воспринимается как команда завершения баш скрипта.

Можно попытаться сгородить огород типа kill -9 XXXXX c предварительным отловом номера терминала и т.п. но не вызовет ли это лишних сложностей?

AfterWork
() автор топика
Ответ на: комментарий от iZEN

Ну в принципе то можно, только не сейчас. Пока нет решения что-то объединять смысла нет. ИМХО.

AfterWork
() автор топика
Ответ на: комментарий от AfterWork

Это к чему???

к тому

Вся суть в том что надо регулярно из таких живых удаленных консолей выходить, для того чтобы локальный скрипт мог продолжиться

Deleted
()
Ответ на: комментарий от Deleted

к тому

Теперь понятно почему Вы это написали.

Но Вы не верно поняли и/или невнимательно прочитали первый пост.

Чтобы локальный скрипт мог продолжиться надо чтобы удаленный в живой консоли полностью завершился и можно было получить с удаленного сервера данные. То есть nohup проблемы не решает.

Сейчас танцую вокруг

kill `ps -a -U username | grep sshd | grep -v grep | awk '{print $1}'` 
Но по скольку в некоторых ситуациях username=root это создает сложности. Только плиз не надо меня тыкать в моветоны. Если выбор состоит между моветоном и бестолковым никому не нужным огородом, то ИМХО стоит выбрать моветон. Особенно если четко осознаешь возможные последствия.

AfterWork
() автор топика
Ответ на: комментарий от Deleted

Бррр. А как выбрать какой из ssh-эй в фон-то отправлять? Тут вся проблема в том что неизвестно как выбрать нужный PID.

    1  1727  1727  1727 ?           -1 Ss       0   0:15 /usr/sbin/sshd -D
 1727 18146 18146 18146 ?           -1 Ss       0   0:00  \_ sshd: root@pts/0    
18146 18148 18148 18148 pts/0    18208 Ss       0   0:00  |   \_ -bash
18148 18208 18208 18148 pts/0    18208 R+       0   0:00  |       \_ ps axjf
 1727 18170 18170 18170 ?           -1 Ss       0   0:00  \_ sshd: root@pts/1    
18170 18172 18172 18172 pts/1    18172 Ss+      0   0:00      \_ -bash

Вот такая к примеру ситуация. Головой то я понимаю что убить надо 18146. Но как это завернуть в команду?

AfterWork
() автор топика

Я может туплю и решение есть очень простое, но я чего-то не нашел никакого. Может кто-то подать идею?

kill -KILL $$


$$ поквочен, естественно, должен быть, чтобы не евалился на локальной машине. Но

Дальше через .bashrc автоматом запускается скрипт на удаленной машине

почему не

ssh -i /path/to/key user@host <<EOF
...
EOF
?

d_a ★★★★★
()
Последнее исправление: d_a (всего исправлений: 1)
Ответ на: комментарий от d_a

kill -KILL $$

Из скрипта я так прибью только сам скрипт. Или я что-то не так понимаю?

$$ поквочен, естественно, должен быть, чтобы не евалился на локальной машине. Но

Вот как-бы совсем не понял о чем спик. Можно поподробнее и на более русском языке. Плиз.

Почему не

Так исторически сложилось. А лучшее это самый злобный враг хорошего. Есть еще анекдот про солнышко и папу программера.

AfterWork
() автор топика
Ответ на: комментарий от AfterWork

В целом решение получилось кривоватое, но меня устраивает на данный момент и в тех условиях что у меня есть.

kill `ps -a -o ppid,comm --pid $PPID | grep bash |awk '{print $1}'` 
Главное что работает. Потом, если будет надо допилю покрасивее. Всем спасибо.

AfterWork
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.