"ssh example.com" зависает, но "ssh example.com bash -i" нет - PullRequest
6 голосов
/ 12 февраля 2010

каждый день я сталкиваюсь с очень странным явлением.

Из моего университетского интернет-соединения sshing на мою машину ("ssh example.com") работает без проблем.

Из моего домашнего adsl "ssh example.com" моя консоль застревает с этим сообщением:

debug1: Server accepts key: pkalg ssh-rsa blen 533
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.

Иногда это может впустить меня, но в большинстве случаев нет. Самое смешное, что если я выполню «ssh example.com bash -i», я сразу же войду в систему.

Ответы [ 5 ]

11 голосов
/ 28 февраля 2010

Я наконец-то нашел источник проблемы. Это связано с TCP-пакетами типа обслуживания (ToS) SSH.

Когда вы запрашиваете обычный ssh-терминал, ssh устанавливает для типа обслуживания пакетов TCP (ToS) значение «интерактивный». Мой маршрутизатор в моей резиденции блокирует эти типы пакетов!

При использовании netcat туннелированные TCP-пакеты не получают никаких служебных директив. Таким образом, если вы туннелируете весь свой ssh-трафик через netcat, вы сбросите ToS пакетов TCP по умолчанию.

В .ssh / config вы должны установить:

Host *.example.com
    ProxyCommand nc %h %p

Итак, каждый раз, когда вы пытаетесь подключиться по ssh к example.com, вызывается netcat и туннелирует пакеты.

9 голосов
/ 07 апреля 2011

Начиная с OpenSSH 5.7 , вы можете просто добавить это в файл конфигурации ssh (либо ~ / .ssh / config, либо / etc / ssh / ssh_config):

Host *
  IPQoS 0x00

Это более прямой способ обойти проблему, выявленную Астериосом.

1 голос
/ 11 августа 2010

У меня только что была такая же проблема. Попробуйте войти с другим ssh-клиентом для получения дополнительной информации. В то время как клиент командной строки linux не вернулся с каким-либо полезным сообщением, Putty вернулась с сообщением «сервер отказался выделить pty». Я исправил это с помощью mkdir / dev / pts и mount -a. Как это все испортилось, во-первых, я менее уверен в этом.

Кстати, bash -l должен действовать как оболочка для входа, так что вы сможете довольно легко доказать, что предложение Питера Уэстлейка является правильным или неправильным в вашем случае.

0 голосов
/ 12 февраля 2010

Возможно, на сервере нет ptys.

0 голосов
/ 12 февраля 2010

Разница между этими двумя случаями заключается в том, что "bash -i" не дает вам оболочку входа в систему, а просто запускает ssh. Вы можете "man bash" узнать подробности о том, что такое "оболочка входа в систему", но главное - она ​​запускает / etc / profile и ваш .bash_profile. Посмотрите в этих файлах все, что может вызвать проблемы.

...