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

Использование команды в ssh authorized_keys нарушает работу scp

Я хотел бы использовать команду для каждой клавиши в authorized_keys чтобы установить некоторые переменные среды.

command="MYVAR=test $SHELL" ssh-rsa mykey

Shell работает нормально, но scp не работает.

Каким будет правильный способ установить переменные среды для каждого ключа и не прерывать передачу файлов ssh?

Ваша конфигурация заставляет ssh запускать любую команду в $SHELL всякий раз, когда вы подключаетесь к соответствующему закрытому ключу. Это нормально, если вам нужна интерактивная оболочка, но это нарушит любую попытку запустить команду напрямую. Это ломает `scp, как вы видели, но также ломает такие вещи, как:

ssh myhost uptime

Решение состоит в том, чтобы либо (а) установить переменные среды в другом месте (.ssh/rcили просто используйте стандартные файлы инициализации оболочки), или (б) используйте специальный ключ, если вы хотите принудительно выполнить команду через свой authorized_keys файл.

Итак, я понимаю, что это древний вопрос на данный момент, но я нашел ответ на него сегодня. Это альтернатива настройке переменных среды и может быть лучшим решением в зависимости от вашей ситуации. Моя ситуация такова:

У меня есть экземпляр Splunk, который инициирует сеанс SCP и SSH на удаленный хост. Список электронных писем отправляется через SCP, а затем SSH используется для запуска сценария в удаленной системе для выполнения действий с этим списком электронных писем. Вот верхняя часть моего файла authorized_keys:

command="/home/username/wrapper.sh",no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3 etc...

Это мой сценарий wrapper.sh:

#!/bin/bash

vars=( $SSH_ORIGINAL_COMMAND )
case "${vars[0]}" in
        "/home/username/scripts/myscript.py")
                /home/username/scripts/myscript.py ${vars[1]}
                exit 0
                ;;
        "scp")
                scp -t ${vars[2]}
                chmod 644 ${vars[2]}
                exit 0
                ;;
        *)
                exit 1
                ;;
esac

Первый случай позволяет /home/username/scripts/myscript.py использовать любые параметры командной строки, которые были ему переданы. Вторая, запись случая scp, позволяет записывать входящий файл на диск в предполагаемом месте.

Этот метод позволяет мне ограничить использование открытого ключа 1 командой и по-прежнему разрешить scp. Если у кого-то есть вариант получше, поделитесь. :)