Используйте интерактивную с клавиатурой аутентификацию при передаче по каналу ssh вывода к другой команде

По умолчанию (по крайней мере, на Fedora и другом Redhat derivitives) улучшенный энергией установлен, и он добавляет файл/etc/profile.d/vim.sh

alias vi=vim

Таким образом в Вашем .bashrc или вручную можно не исказить vi, и Вы получите бесцветный интерфейс vi, который Вы ожидаете. Я поместил следующее в свой стандарт bashrc

unalias vi 2> /dev/null
7
23.05.2017, 15:40
2 ответа

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

У меня есть что-то в моем .bash_profile это помещает в настоящее время выполняемую команду в заголовок окна, или screen вкладка. Это работает при помощи a trap:

trap 'bash_current_command' DEBUG

и перед этим:

function bash_current_command {
    # only works in bash > 3.1
    #set -- $BASH_COMMAND

    # for old bash
    set -- $(history 1)
    shift

    if [[ "$1" == "sudo" ]]; then
        cmd="*$(basename -- "$2")*"
    else
        cmd="$(basename -- "$1")"
    fi

    bash_set_title "$cmd"
}

bash_set_title немного функции, которая устанавливает заголовок текущего терминала и заголовок значка с помощью управляющих кодов ANSI. Как Вы видите, это создает подоболочки $(...), и моя интуиция сказала мне, что это могло быть проблемой. Действительно, после того, как я изменил те строки, это работало!

Если кто-то знает, почему это происходит, я был бы рад услышать детали. Сделайте подоболочки обычно крадут tty вход? Или действительно ли это - только проблема в прерывании отладки? Я не вспоминаю проблем с постоянным клиентом stdin вход / передающий по каналу в команды.

(Как можно также видеть, существует несколько проблем с моей функцией так или иначе - она использует одну из подоболочек как обходное решение, таким образом, она может работать на архаичной версии удара (я застреваю с нею в унаследованной системе, но все еще хотел объединенную конфигурацию). Другая подоболочка используется для извлечения фактической команды при использовании sudo, но это перестало работать, если sudo называют с переключателями как sudo -H -u user command. Таким образом, я буду рассматривать это как возможность согласовать этот код...),

4
27.01.2020, 20:18
  • 1
    Это походит на ошибку в bash. С 3.0.16, я не воспроизвожу Ваш, но я вижу bash: child setpgid (24993 to 24990): Operation not permitted после выполнения базового имени. Мое подозрение - это ssh заканчивает тем, что находился не в группе приоритетного процесса терминала и поэтому приостанавливается, когда это пытается отключить эхо, которое является, почему Вы видите свой отраженный пароль. Журнал a strace -f сказал бы нам больше. –  Stéphane Chazelas 18.08.2013, 22:29

Этот ответ не объясняет Ваш конкретный вопрос, но предлагает некоторые возможные обходные решения, которые, также, вероятно, сделают Вашу жизнь более удобной.

Если Вы используете ssh только, чтобы получить доступ к удаленным файлам а не выполнить удаленные команды, то можно смонтировать удаленную файловую систему через sshfs. Необходимо будет установить FUSE для OS X и SSHFS сначала. (Я не знаю, существуют ли двоичные дистрибутивы для OSX.) Затем выполненный

mkdir ~/myserver
sshfs myserver:/ ~/myserver

Необходимо будет пройти проверку подлинности только, когда Вы будете работать sshfs команда. После этого удаленные файлы доступны под ~/myserver, таким образом, можно сделать diff ~/myserver/path/to/remote-file local-file не имея необходимость волноваться, что один из файлов является удаленным. Выполненный fusermount -u ~/myserver размонтировать файловую систему.

Другой подход, который позволяет Вам пройти проверку подлинности однажды и затем выполнить много команд ssh, должен настроить основное соединение. Посмотрите Многократное использование ssh сессия для повторных команд rsync

2
27.01.2020, 20:18

Теги

Похожие вопросы