Когда я ssh
захожу на один из моих серверов, он, кажется, входит в систему, но затем зависает, прежде чем дать мне приглашение ( message debug2: shell request accepted on channel 0 is the last log entry
).
Хотя странная вещь ssh -t "/bin/bash"
работает, когда ssh
нет.
Что я узнал до сих пор
- Я могу нормально войти в систему с серверов в том же географическом месте, как обычно
- Если я
ssh -t '/bin/bash'
- я могу войти в систему из ЛЮБОГО места. - Если я использую
rsync
к серверу, это, кажется, работает, а затем блокирует - Если я использую
rsync
с сервера, он работает без проблем
Что я пробовал
- удаление или изменение всех параметров входа в систему
.profile
,.bashrc /etc/profile
- Изменение
ssh_config
и / илиsshd_config
одного с идентичного сервера, который работает нормально - Я проверил маршрутизацию
- Я проверил эксперта по сети
tcpdump
безрезультатно (хотя, похоже, повторных передач много)
Я действительно не могу думать ни о чем другом
Помимо хитрой сетевой карты драйвера / прошивки.
match
заявления вsshd_config
? Это только один случайsshd
бега?.ssh/authorized_keys
таких какcommand=…
? Прошли ли вы все правила брандмауэра, чтобы посмотреть, не может ли кто-нибудь случайно заблокировать некоторые SSH-пакеты?/etc/profile.d/*
или/etc/bashrc
файлах.Ответы:
Это может быть связано с проблемой в профиле.
При подключении с
ssh -t /bin/bash
вашей оболочкой не будет «вход», он не будет источник/etc/profile
ни~/.profile
и~/.bashrc
...Таким образом, после подключения переведите оболочку в режим отладки, затем найдите каждый файл, чтобы найти то, что блокируется внутри:
РЕДАКТИРОВАТЬ
Обратите внимание, что я ошибся, файл .bashrc будет получен любой интерактивной оболочкой (поэтому здесь важны только файлы profile, profile.d).
Попробуйте составить список различных этапов процесса подключения. Что-то вроде этого
1) ssh-соединение (config, ...)
2) вход в систему (PAM, tty, wtmp, ...)
3) запуск оболочки (профиль, доступ к домашнему каталогу, ...)
Чтобы проверить (1), вы можете запустить демон sshd в режиме отладки. Для этого вам нужно запустить другой sshd, прослушивая выделенный порт (не на порту 22, поэтому нет необходимости останавливать обычный демон sshd).
Этот sshd будет принимать только одно соединение и не будет переходить в фоновый режим. Откройте другой терминал и подключитесь к этому сеансу ssh.
Вы можете сравнить полученные сообщения с сообщениями другого сервера того же бренда. Тогда вы будете знать, если проблема на стороне SSH или нет.
(-ddd и -vvv - максимальный уровень отладки, вы можете настроить его)
Я получил эту ссылку , гораздо более подробно.
источник
Ответ на мою проблему Оказывается, это была проблема с сетью. В конце концов я обнаружил, что, немного сбрасывая MTU всех сетевых карт, проблема исчезла.
Скорее всего, что-то неправильно настроено для этой сети, но теперь я могу доказать это и передать это сетевой команде (которая постоянно говорила мне, что это проблема с сервером).
Однако следует помнить, что это последнее средство. У меня была особенность в том, что ssh-сервер работал из той же подсети, но не за ее пределами, а ssh -t '/ bin / bash' работал из любой точки.
У меня также были rsyncs, которые нормально запускались, но в какой-то момент просто зависали или сбрасывали соединение.
Так что, если вы смотрите на этот ответ, попробуйте сначала другие, приведенные выше, и ТОЛЬКО если у вас есть странности, подобные моей, это может помочь.
Так что спасибо за помощь. Я попробовал все, и это научило меня загружаться, и позвольте мне подтвердить, что это не имеет ничего общего с сервером (это все, на что я надеялся).
Так что спасибо всем, кто помог
источник
Когда вы делаете
ssh some_user@some_host /bin/bash
, что вы делаете, запуск some_user «s оболочки (как определено в/etc/passwd
на some_host ) , а затем выполняет заданную команду,/bin/bash
из внутри этой оболочки.Теперь оболочка some_user (предположим, что это тоже
bash
) не запускается интерактивно (вместо этого она выполняет данную команду). Таким образом, он не выделяет pty ( псевдотерминал ), а это означает, что для введенной команды нет pty, поэтому он запускается неинтерактивно.В этом примере запрошенная
/bin/bash
команда запущена, но кажется, что она зависает.Это можно исправить, попросив
ssh
в любом случае создать pty, чтобы он был доступен для оболочки и ее дочерних процессов. Это то, что-t
делает.Вы также можете исправить это, заставив команду создать pty. Ибо
bash
вы делаете это, передавая-i
аргумент. Следующая командная строка также должна работать:Обратите внимание, однако, что в этом последнем случае оболочка не может получить доступ,
/dev/tty
и это приводит к предупреждению:Причины этого объясняются здесь . Это может или не может быть проблемой в зависимости от того, что вы планируете делать в оболочке, но использование
ssh -t
, вероятно, является лучшим вариантом.(обратите внимание, что вы можете просто передать
bash
как команду, потому что она должна быть в любом случае на пути к оболочке пользователя по умолчанию)источник
У меня та же проблема, когда я недавно использовал вложенную платформу виртуализации.
Он работает после уменьшения MTU с 1500 до 1400 на исходном или целевом сервере.
источник