В чем разница между терминалом и шеллом в ssh?

agent007new

Прошу не ругать за безграмотность (любую).
В общем, так: когда мы открываем канал в ssh, то можем там запросить создание псевдо-терминала (pty-req а можем просто шелл запросить (shell). При запросе терминала мы можем указать размеры терминала, и они даже могут как-то учитываться удаленной стороной. В чем будет разница в приходящих мне данных? Т.е. что может придти для терминала, но не придет для шелла и наоборот? В частности, escape-последовательности могут приходить в шелл,

pitrik2

а зачем тебе это надо?
свой putty пишешь?

vall

если это то о чём думаю то разница в этом:
pty-req: sshd - tty-master - tty-slave - sh
shell: sshd - pipe - sh
некоторые программы будут работать иначе если не обнаружат у себя терминала

agent007new

Ага, тока без гуя

agent007new

Спасибо. Вот это уже похоже на то, что мне нужно, осталось разобраться с терминалами - я ни разу не юниксоид

uncle17

pty-req
оп
т.е. я удаленно теоретически не могу запустить абсолютно любой процесс (если это прямо не запрещено составителем программы)?

agent007new

оп
т.е. я удаленно теоретически не могу запустить абсолютно любой процесс (если это прямо не запрещено составителем программы)?
Вообще, для того и задумывалось. Там есть даже тип запроса "exec", который тупо запускает то, что ты его просишь (если у пользователя, под которым ты заходишь есть права на это). Также можно сигналы слать и прочая

uncle17

понял, уровень образования повысился

Anturag

В принципе разницы нет, так как в псевдотерминале всё равно будешь запускать shell, я полагаю.
Вопрос, а какова задача? Если нужен интерактивный режим, то используй псевдотерминал, если скрипты запускать, то sh будет достаточно.
Есть хороший документ про ssh - RFC4254, почитай.

uncle17

хотя... бррр
даже если по ssh открыт root, то тоже есть ограничения?

agent007new

Вопрос, а какова задача? Если нужен интерактивный режим, то используй псевдотерминал, если скрипты запускать, то sh будет достаточно.
Есть хороший документ про ssh - RFC4254, почитай.
Задачка - некоторый сканер, который работает хочет выполнять некоторые команды, получать ответы, обрабатывать их и т.д.
В принципе, у меня уже есть реализация, которая работает через терминал, но она довольно глючная и тормозная, как из-за того, что довольно криворукий чувачок писал, так и из-за того, что использует какую-то древнющую версию сторонней библиотеки, которая глючная плюс пилена, всеми кому не лень. А я тут решил сделать по-человечески, вот и изучаю возможности этого дела.
Все rfc по ssh сегодня прочитал, но некоторые вопросы остались, думаю, что больше из-за того, что я в unix не слишком силен. Скажем, про escape-последовательности в rfc ничего не сказано. Может, это не их область, но в книженции SSH. The Secure Shell приводятся примеры escape-последовательностей, которые можно слать серверу, там есть последовательность отключения escape-последовательности. А у меня бывает, они приходят и сейчас удаляются руками. Вот, пытаюсь, в частности, узнать - можно ли победить эту проблему стандартными средствами. Плюс, что может поломаться, если я переключу с терминала на шелл

agent007new

Если root'ом можно по ssh логиниться, то и делать можно то, что root'у разрешено

uncle17

а, т.е. для рута нет разницы - по ssh или чисто tty? *не имея в виду, конечно, сетевые функции*

agent007new

Вроде как, да, если не прав - пусть знающие люди поправят

Serab

Я что-то не совсем понимаю. Вот есть процесс от пользователя 0 (/bin/bash он получает последовательности символов: в одном случае от tty, в другом по сети. Что с ними делать, уже решает вне зависимости от того, откуда они пришли. Могут из файла поступать, например. Тут что-то может быть непонятно?

uncle17

Что с ними делать, уже решает вне зависимости от того
во
т.е. все лежит на "пальцах" написавших его людей?

Serab

"его" — /bin/bash?

uncle17

ненене
человеческий фактор

Serab

Я не понимаю тебя что-то :)
Можно залогиниться по ssh'у на комп под рутом или без рута, но потом заюзать sudo или su, ввести rm -rf /* и будет плохо, да.

uncle17

ну так вот если rm писали одни люди и rm писали другие люди, то они могут написать:
1) с ssh ты хер выполнишь оную команду
2) с ssh ты хер выполнишь оную команду, зато с tty...
3) да хоть с ssh, хоть с tty - нам похуй

Anturag

escape-последовательности не имеют отношения к ssh, но непосредственно связаны с терминалом (не с shell!). Если не будешь использовать pty в ssh сессии, то терминальных escape-последовательностей не должно быть вообще. И для описанной тобой задачи, если правильно её понял, терминал не нужен.
PS: А вообще терминалы, особенно не псевдо, а какой-нибудь VT10x или VT2xx, штуки сложные и ИМХО лучше с ними по доброй воле не связываться :)

agent007new

Спасибо, с этим теперь, вроде, ясно

krishtaf

ssh - это всего лишь транспорт, который соединяет эмулятор терминала (putty, securecrt и т.д.)
раньше(во времена мейнфреймов) терминалы были реализованы в железе и подсоединялись терминальными линиями связи со своими протоколами, сейчас концептуально ничего не изменилось, а физически - все эмулируется
Кстати, putty эмулирует linux console и vt100
И более того, локальные консоли - это тоже эмуляторы терминалов. Эмулируются ядренным драйвером.
Свойства терминалов описаны в /etc/termcap
Можно попытаться реализовать свой терминал с требуемыми возможностями (capability) и задекларировать в /etc/termcap.

krishtaf

В чем разница между терминалом и шеллом в ssh?

концептуально разные понятия.
терминал - это псевдографический интерфейс, который обеспечивает вывод информации на экран и обрабатывает клавиатуру и мышь (если терминал имеет мышь)
шелл - это программа, которая выполняет команды, которые вводит пользователь.

Serab

ты наговорил очевидностей и при этом не ответил на вопрос. В чем был смысл?

krishtaf

 
ты наговорил очевидностей и при этом не ответил на вопрос. В чем был смысл?

в том, что если хочется больше чем стандартный терминал - то нужно копать /etc/termcap
P.S.
никто на очевидный вопрос "В чем разница между терминалом и шеллом в ssh?"
не написал такой же очевидный ответ.
Претензии выскажи зеркалу, малыш. :)

Serab

P.S.
никто на очевидный вопрос "В чем разница между терминалом и шеллом в ssh?"
не написал такой же очевидный ответ.
Потому что они очевиден?
Претензии выскажи зеркалу, малыш. :)
К чему так оскорбляться?

krishtaf

вопрос задал человек, которому что терминал, что шелл - один хер:
Прошу не ругать за безграмотность (любую).

а ты ему про tty отвечаешь.
нахер это ему? тем более, что даже не терминал, а файл устройства.

Serab

Я ему ни про что не отвечал, потому что сам не знаю, о чем идет речь, хотя в твоих сообщениях ничего нового для себя не нашел.

krishtaf

Я ему ни про что не отвечал, потому что сам не знаю, о чем идет речь, хотя в твоих сообщениях ничего нового для себя не нашел.
ну и правильно, я же не тебе отвечал :)

Serab

Ну можешь тогда для меня теперь ответить на вопрос из первого сообщения? Потому что я его (ответа) не нашел. Вот что странно. Имеено об этом тебе и написал.

krishtaf

Ну можешь тогда для меня теперь ответить на вопрос из первого сообщения? Потому что я его (ответа) не нашел. Вот что странно. Имеено об этом тебе и написал.
пацану нужно что-то из этого:
либо терминал с особыми свойствами
либо настроить sudo
либо все вместе.

agent007new

терминал - это псевдографический интерфейс, который обеспечивает вывод информации на экран и обрабатывает клавиатуру и мышь (если терминал имеет мышь)

И как это вяжется с ssh? Запросил я у сессии терминал - у меня что ли начнут сами события мыши или клавиатуры передаваться или я их еще как-то должен передавать отдельно, если да - то как?
вопрос задал человек, которому что терминал, что шелл - один хер:

Как уже было отвечено ранее - шелл там запускается в обоих случаях, только данные там ходят по-разному между ним и sshd. Вопрос был в том, как это влияет на данные, которые мне приходят в ответ.
пацану нужно что-то из этого:
либо терминал с особыми свойствами
либо настроить sudo
либо все вместе.

То, что мне нужно, я написал в одном из предыдущих постов, правда, не указал, что на удаленной машине я настраивать ничего не могу. А зачем мне терминал с особыми свойствами? А sudo здесь вообще при чем? Да и какое судо на циске?

AlexV769

Да и какое судо на циске?
ssh к циске?
Если что, оно там сильно ненатуральное (если речь про IOS, а не про NX-OS)

agent007new

ssh к циске?
Если что, оно там сильно ненатуральное (если речь про IOS, а не про NX-OS)
Что значит сильно ненатуральное (в частности, на IOS)? Вполне нормально работает.

tata2410

Разве оно не утащено туда с кунигу^куникса?

AlexV769

Каналы закрывает без спроса, например.

AlexV769

>telnet cisco-nexus 22
Connected to cisco-nexus.
Escape character is '^]'.
SSH-2.0-OpenSSH_4.5

>telnet cisco-ios 22
Connected to cisco-ios.
Escape character is '^]'.
SSH-2.0-Cisco-1.25

agent007new

Ну, как бы rfc не запрещает закрывать канал, если он не используется некоторое время (да и вообще, в любое другое время). Вон, на многих сайтах тоже сессия протухает, если ей некоторое время не пользоваться, это ж не значит, что они сильно ненатуральные. Никто не обязан openssh использовать - кому, что больше подходит, у меня сейчас, например, тоже не openssh клиентская либа

AlexV769

"сразу после исполнения команды" - это достаточный таймаут? По-моему не очень.
у меня сейчас, например, тоже не openssh клиентская либа
а какая? перловая?

krishtaf

 
И как это вяжется с ssh?

В том-то и дело что никак не вяжется :)
 
Запросил я у сессии терминал - у меня что ли начнут сами события мыши или клавиатуры передаваться или я их еще как-то должен передавать отдельно, если да - то как?

у тебя есть ssh-клиент, который эмулирует терминал и обрабатывает события клавиатуры, мыши и управляет экраном.
Причем ssh-клиент говорит серверу какой он терминал эмулирует, у сервера в /etc/termcap прописаны свойства многих терминалов. И сбольшой вероятностью в /etc/termcap описан терминал, который сообщает ssh-клиент.
Один хер: ssh или telnet или serial - механизм взаимодействия "терминал - сервер" один и тот же, только транспорт разный.
ssh протокол описывает только безопасное выполнение комманд.
sudo - нужно для разграничения прав запуска комманд.
Ты напиши более подробно и понятно про свою задачу и поменьше выебывайся, падаван нна.

agent007new

Ух ты, и такое бывает? Я сталкивался только, когда проходит некоторое время

AlexV769

Бывает, в ssh v2 при подключении без терминала циска закрывает канал без церемоний и следующую команду выполнить уже нельзя - соединение закрыто.

agent007new

Ты напиши более подробно и понятно про свою задачу и поменьше выебывайся, падаван нна.
Вообще, я нигде не выебывался. Задача: залогиниться на тачку, выполнить там несколько команд, получить от них результат. Выполняемые команды могут зависеть от результатов предыдущих. Все это нужно сделать без участия пользователя. Поддерживаемые системы различны: циски, линунксы, соляра, бсд, наборы команды на них различные.

krishtaf

perl +
либо ssh-модуль
либо телнет-модуль
либо rsh-модуль

dgaf

Expect самое то.

psihodog

а любой приличный ssh клиент чем не подходит?
тот же PuTTY, например.

dgaf

Очевидно, нужна автоматизация (там, где подразумевается интерактивность).

vall

посмотри на fabric http://fabfile.org

agent007new

Всех благодарю за предложенные варианты, но они мне не подходят ввиду присущих ограничений, написать про которые у меня вылетело из головы, т.к. исходный вопрос был немного другой. Вот эти ограничения:
1. Я не могу заставлять клиентов ставить у себя дополнительно какие-то вещи: перл, питон и любые другие - максимум набор dll'ек, которые будут рядышком с прогой валяться.
2. Эта штука является не полноценной системой, а частью более сложной программы, которая написана на С++ и с которой нужно уметь легко взаимодействовать, т.к. обработка результатов довольно нетривиальная. При этом мы не можем перенести логику на новый язык (чтобы не было дублирования старого и нового вариантов, старый используется еще для других целей).
3. Плюс панический страх руководства всего стороннего :) Дай им волю, мы бы вообще руками писали вообще без сторонних библиотек. Т.е. если на libssh2 или что-то подобное они еще согласны, то тот же питон уже не пойдет - об этом уже было много разговоров.
Т.е. выбор у меня не особо велик, поэтому я как-то и не делал акцент на то, как это сделать.

Ivan8209

> В чем разница между терминалом и шеллом в ssh?
В ssh ни терминалов, ни шеллов нет.
Терминал --- это устройство, симулирующее телетайп.
Шелл --- интерпретатор (диалоговый) командного языка.
> можем там запросить создание псевдо-терминала (pty-req)
Тебе выделят, не "создадут," это не обязательно, а именно выделят,
потому что псевдотерминалы могут быть жёстко прописаны нодами в /dev,
псевдотерминал. Подробности можно прочитать в openpty(3) и в т.п.
документации.
---
Q7: А что за suxx?
A7: unix.
Оставить комментарий
Имя или ник:
Комментарий: