2

В своем учебном курсе по Amazon EC2 я подумал, что было бы хорошей идеей просто всегда быть пользователем root, все еще входя в систему. Я добавил эту строку в мой .bashrc

/usr/bin/sudo /bin/bash

Таким образом, мне не нужно было бы входить по SSH от имени пользователя root, но я буду автоматически переключаться при входе в систему. Однако, когда это было в .bashrc, он сломал любой SFTP-клиент, который пытался подключиться. Ошибки варьировались в зависимости от используемого клиента, но обычно все они заканчивались тайм-аутом, даже если они успешно подключались к удаленному хосту. WinSCP предположил, что на хосте может не работать SFTP-сервер.

Теперь я полностью осознаю, что добавление этой строки было плохим ходом, но я не знаю, почему это нарушает SFTP. Я вхожу в систему как пользователь ec2, но становлюсь пользователем root (я думаю), но я не могу понять, почему это вызывает проблему.

2 ответа2

2

В мире bash файлы инициализации профиля часто вызывают файлы инициализации rc, как описано в этом сообщении StackOverflow. Следовательно, файлы rc init не привязаны к интерактивным оболочкам.

Насколько мне известно, протокол SFTP - это неинтерактивное использование оболочки SSH для выполнения программы sftp-сервера, которая взаимодействует с вызывающей стороной через потоки stdin и stdout . Что касается вашей проблемы, я думаю, что происходит одна из двух нежелательных вещей:

  • Команда sudo запрашивает пароль, что является неожиданным для клиента sftp, который ожидает двоичного взаимодействия со своим коллегой по sftp-серверу

  • Пользователь root не имеет доступа к бинарному файлу, вызываемому слоем sftp (из-за настроек прав доступа - но я полагаю, это случай sudo)

У вас должно быть два способа обойти это:

  • ограничьте свой корневой автоматический переход на интерактивные оболочки только в соответствии с предложением Мартина, например, с помощью команды tty :

    if tty --silent
    then
        /usr/bin/sudo /bin/bash
    fi
  • или создайте / измените свой личный файл .bashprofile, чтобы он не вызывал из него ваш rc-файл (по крайней мере, с настройкой PATH).

2

Обычно .bashrc запускается, а затем запускается оболочка или SFTP-сервер.

Но ваш .bashrc никогда не завершает работу, так как он запускает оболочку самостоятельно. Таким образом, SFTP-сервер никогда не запускается.

Следовательно, клиент SFTP либо тайм-аут ожидания ожидания рукопожатия протокола SFTP; или не удается попытаться декодировать какой-либо случайный вывод оболочки как пакет SFTP.


Одним из возможных путей решения этой проблемы было бы использование sudo для интерактивных сеансов (т.е. не для неинтерактивных сеансов SFTP).

Хотя обычно .bashrc следует использовать только для интерактивных сессий. Так что не стоит вмешиваться с SFTP. Ваш сервер как-то неправильно настроен.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .