Я хотел бы использовать команду для каждой клавиши в 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. Если у кого-то есть вариант получше, поделитесь. :)