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

Linux закрывает соединение после успешного входа в систему

Я работаю на сервере с Debian 5.2.2. Не имея каких-либо административных знаний в Linux, я думаю, что что-то напортачил. Я использовал apt-get update и apt-get upgrade, чтобы обновить все, а затем загрузил и установил Apache, PHP и MySQL. Эти инструменты, кажется, работают нормально, но теперь я даже не могу войти на сервер, ИСКЛЮЧАЯ через локальную консоль. Если я попытаюсь войти в систему через графический интерфейс или попытаюсь войти в систему удаленно через ssh, scp или что-то еще, я НЕМЕДЛЕННО отключусь после успешного входа в систему. Другими словами, у него нет проблем с начальным подключением, но когда я ввожу правильное имя пользователя и пароль (для root или любого пользователя), я отключаюсь. В графическом интерфейсе экран на секунду становится черным, а затем возвращает меня к приглашению входа в систему. С ssh я получаю «соединение с [сервером] закрыто». Я попробовал WinSCP и получил сообщение «Соединение было неожиданно закрыто. Сервер отправил команду, статус выхода 254».

Любая помощь приветствуется, и если есть способ дать дополнительную информацию, пожалуйста, дайте мне знать. Спасибо за уделенное время.

Редактирует:

- Любой пользователь может войти в локальную консоль

- На данный момент у меня нет локального доступа к машине, поэтому все, что я могу сделать прямо сейчас, это ssh. Вот результат ssh -vvv [сервер] после ввода пароля:

Linux xxxxxxx.com 2.6.26.8+20091222+1056-debhawk-5.2.2-custom #1 SMP PREEMPT Tue Dec 22 10:58:57 EST 2009 i686

Last login: Mon Apr 30 14:48:07 2012 from xxxxxxx.com
debug2: channel 0: rcvd eof
debug2: channel 0: output open -> drain
debug2: channel 0: obuf empty
debug2: channel 0: close_write
debug2: channel 0: output drain -> closed
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug2: channel 0: rcvd close
debug2: channel 0: close_read
debug2: channel 0: input open -> closed
debug3: channel 0: will not send data after close
debug2: channel 0: almost dead
debug2: channel 0: gc: notify user
debug2: channel 0: gc: user detached
debug2: channel 0: send close
debug2: channel 0: is dead
debug2: channel 0: garbage collecting
debug1: channel 0: free: client-session, nchannels 1
debug3: channel 0: status: The following connections are open:
#0 client-session (t4 r0 i3/0 o3/0 fd -1/-1)

debug3: channel 0: close_fds r -1 w -1 e 6
Connection to xxx.x.xx.xx closed.
debug1: Transferred: stdin 0, stdout 0, stderr 35 bytes in 0.0 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 3845.3
debug1: Exit status 254

Есть несколько похожих сообщений, предполагающих, что это может быть проблемой с созданием оболочки из-за неправильных настроек пути к оболочке в /etc/passwd

Чтобы проверить это, определите, что путь к вашей пользовательской оболочке существует и является исполняемым;

# cat /etc/passwd | grep tomh
tomh:x:1000:1000:Tom H:/home/tomh:/bin/bash <-- check this exists

Проверить наличие оболочки:

# file /bin/bash
/bin/bash: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, stripped

также убедитесь, что оболочка не установлена ​​на /sbin/nologin или /bin/false, что также заблокирует вход даже при успешной аутентификации.

http://www.linuxforums.org/forum/ubuntu-linux/173779-solved-ssh-issue.html
http://www.unix.com/hp-ux/169496-solved-ssh-debug1-exit-status-254-problem.html
http://www.mail-archive.com/seawolf-list@redhat.com/msg04460.html

Моя проблема заключалась в том, что каталог имени пользователя для входа был недоступен в /home каталог. Поэтому, если у вас есть пользователь с именем testuser, убедитесь, что /home/testuser каталог доступен. Узнал об этом из /var/log/messages файл.

Когда я столкнулся с такой проблемой, у меня все еще было открыто одно соединение / var / log / messages:

pam_loginuid(sshd:session): Cannot open /proc/self/loginuid: Read-only file system

Редактирование vi /etc/init.d/ named позволило изменить способ монтирования / proc, поэтому ошибки не было после перезагрузки.

В основном линии

if [ ! -e "${CHROOT_PREFIX}/proc/meminfo" ]; then
mkdir -p “${CHROOT_PREFIX}/proc”
        mount -tproc -oro,nosuid,nodev,noexec proc ${CHROOT_PREFIX}/proc 2>/dev/null
fi;

Были изменены на

if [ ! -e "${CHROOT_PREFIX}/proc/meminfo" ]; then
mkdir -p “${CHROOT_PREFIX}/proc”
        mount –bind -o ro /proc “${CHROOT_PREFIX}/proc” 2>/dev/null
fi;

Совет, который я нашел на http://www.computersalat.de/linux/strato-vserver/ssh-login-problem-nach-neustart/#comment-905

debug3: channel 0: close_fds r -1 w -1 e 6
Connection to xxx.x.xx.xx closed.
debug1: Transferred: stdin 0, stdout 0, stderr 35 bytes in 0.0 seconds
debug1: Bytes per second: stdin 0.0, stdout 0.0, stderr 3845.3
debug1: Exit status 254

На вашем SSH-сервере sshd_config файл, добавьте следующую строку:

UsePAM no

Ниже sshd_config Я использую в OS X. Я публикую его (а не один на машине Debian), потому что у меня возникла та же проблема в OS X с использованием Macports (а не Debian).

AddressFamily any
ListenAddress 0.0.0.0
Port 1522

# The default requires explicit activation of protocol 1
Protocol 2

# HostKeys for protocol version 2
HostKey /opt/local/etc/ssh/ssh_host_ed25519_key
HostKey /opt/local/etc/ssh/ssh_host_ecdsa_key
HostKey /opt/local/etc/ssh/ssh_host_rsa_key
HostKey /opt/local/etc/ssh/ssh_host_dsa_key

# Ciphers and keying
#RekeyLimit default none

# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
#LogLevel INFO

# User Authentication

PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
UsePAM no

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile  .ssh/authorized_keys

# Use sandbox on OS X
UsePrivilegeSeparation sandbox

# All user's environment
PermitUserEnvironment yes

# no default banner path
#Banner none

# override default of no subsystems
Subsystem   sftp    /opt/local/libexec/sftp-server

Если вы используете LDAP, замените каждое вхождение:

pam_unix_*.so

во всех файлах в /etc/pam.d/ с:

pam_unix.so

Это ошибка в пакете libpam-ldap (примеры файлов pam.d), см.: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=612825

Убедитесь, что система может разрешить правильно, ssh немного разбирается в этом.

Проверьте /etc/secuiry/limits.conf, чтобы узнать, есть ли у каких-либо учетных записей жесткие ограничения на количество входов в систему и увеличить их, например:

*       hard    maxlogins   0

В дополнение к / var / log / messages, как упомянуто Брамом, также проверьте /var/log/auth.log и вставьте любой соответствующий вывод. Лучше слишком много информации, чем слишком мало.

Я действительно столкнулся именно с этими симптомами в способе, предложенном ранее @ tom-h ... и решение было очень простым.

Чтобы решить, просто vipw и отредактируйте файл passwd, настройте оболочку с / bin / false на / bin / bash или вариант по вашему выбору.

# cat /etc/passwd | grep adamjohn
adamjohn:x:1000:1000:Adam John:/home/adamjohn:/bin/false <-- check this exists
# vi /etc/passwd
adamjohn:x:1000:1000:Adam John:/home/adamjohn:/bin/bash <-- change this item

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

У меня были аналогичные проблемы с Ubuntu 16.04 с LDAP. «ssh -vv ...» показало, что аутентификация по паролю прошла успешно, но затем пришло сообщение: «Подключение к ... закрыто удаленным хостом».

Исправлено в /etc/ldap.conf в конфигурации "bind_policy".

/var/log/auth.log показал:

sshd[19884]: Accepted password for xxxx from xx.xx.xx.xx port 48426 ssh2
sshd[19884]: pam_unix(sshd:session): session opened for user xxxx by (uid=0)
systemd-logind[577]: New session 22 of user xxxx.
systemd: pam_unix(systemd-user:session): session opened for user xxxx by (uid=0)
sshd[19884]: nss_ldap: could not search LDAP server - Server is unavailable
sshd[19884]: fatal: login_get_lastlog: Cannot find account for uid 1502 
sshd[19884]: pam_unix(sshd:session):   session closed for user xxxx

Обнаружил, что проблема была в /etc/ldap.conf. Я изменил bind_policy на «soft», поэтому nss_ldap немедленно возвращается при сбое сервера. По умолчанию установлено «hard_open», которое восстанавливает соединение, если открытие соединения с сервером LDAP не удалось. Закомментировав строку «bind_policy soft», она вернулась к значениям по умолчанию и решила проблему. :-)

После долгих поисков я наконец нашел ответ в случае, когда CentOS 7 работает в непривилегированном контейнере.

Прокомментируйте session required pam_loginuid.so строку в файле /etc/pam.d/sshd, а затем перезапустите контейнер.

Я нашел это решение в https://discuss.linuxcontainers.org/t/regular-user-is-unable-to-login-via-ssh/4119

Все это отличные предложения. В моем случае это была настройка PuTTY, которая вызывала мою боль:

Я поставил удаленную команду для отправки на сервер в конфигурации «SSH». Что отлично работает в 99% случаев, однако, когда команда не работает, она просто закрывает сеанс.

Команда??? экран -rd

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

Решение:

переместите это в bashrc / bash_profile.

В моем случае это было вызвано пользователем без оболочки на сервере SSH. Это очень легко исправить, просто используйте -N переключитесь с помощью вашего (открытого) SSH-клиента.

Из страница руководства:

-N Не выполняйте удаленную команду. Это полезно только для переадресации портов.

Я просто не могу согласиться с некоторыми ответами здесь. Пользователь с оболочкой /bin/false, /bin/nologin - правильная конфигурация, она обычно используется для пользователей, использующих только туннели SSH, без возможности входа в систему и выполнения каких-либо команд на сервере SSH. Так что не пытайтесь «исправить» это на сервере, просто используйте -N переключитесь с помощью вашего SSH-клиента.

Удостоверься что /etc/passwd имеет правильную оболочку для пользователя.

Например, пользователь ahmad не удалось войти на сервер из-за отсутствия оболочки:

ahmad:x:10000:1003::/home/ahmad:/bin/false

Поскольку оболочка установлена ​​на /bin/false это означает, что пользователь ahmad не имеет оболочки, и чтобы исправить это, вам нужно изменить /bin/false к /bin/bash для bash или любых других оболочек.

Если вы используете панель управления веб-хостингом, например Plesk, убедитесь, что у пользователя есть доступ к серверу.

Я только что столкнулся с этой проблемой (особенно для sftp, но не ssh, где я мог подключиться без проблем), и ни одно из решений здесь не помогло мне. В моем случае это произошло из-за слишком большого количества ключей ssh ​​(IdentityFile) в ~/.ssh/. Кажется, что когда у вас нет записи о хосте в ~/.ssh/config для хоста, к которому вы пытаетесь подключиться с правильным ключом, он просто отправляет все ваши ключи один за другим. У меня было более 6 ключей, и, конечно же, по умолчанию MaxAuthTries равно 6 (по крайней мере, в Ubuntu).

Решением было отредактировать серверный /etc/ssh/sshd_config и увеличить MaxAuthTries. Я установил 10.

#MaxAuthTries 6
MaxAuthTries 10

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

Возможно, это проблема с LDAP. Authconfig для настройки параметров LDAP, Kerberos и SMB был запущен без,

--энаблемхомедир