1

Я настроил выделенную пару ключей SSH для принудительной установки определенной команды на удаленном сервере. Я добавил открытый ключ в файл author_keys удаленного сервера вместе с параметром команды, определяющим команду, которая будет выполняться при использовании этого ключа. Эта команда является сценарием оболочки, для которого требуется один аргумент командной строки, который я ожидаю передать в переменную среды $SSH_ORIGINAL_COMMAND .

Когда я выполняю команду ssh с клиента и задаю использование этого конкретного ключа, вот так:

ssh -i id_rsa_mykey -o User=abc -o HostName=myhost xxx

Удаленный сценарий выполняется должным образом и передается xxx в переменной SSH_ORIGINAL_COMMAND .

Если я пытаюсь передать удаленной команде адрес электронной почты, однако удаленный sshd интерпретирует значение как user@host и, по-видимому, пытается выполнить аутентификацию на части до символа @ а удаленная команда никогда не выполняется. /var/log/auth.log на удаленном сервере имеет ошибку:

Invalid user xxx from 192.168.0.1

Как я могу избежать символа @ или иначе не заставить sshd оценить значение как user@host и вместо этого передать значение как есть удаленной команде?

Я пытался как пытаться использовать обратную косую черту, избегая символа @ так и используя -- перед аргументом, но sshd не поддерживает соглашение об окончании аргументов.

  • Клиентский компьютер работает под управлением Ubuntu с версией ssh OpenSSH_7.2p2.
  • На сервере установлена Debian с версией sshd OpenSSH_6.7p1

1 ответ1

1

Я предполагаю, что у вас есть причины использовать -o User=abc -o HostName=myhost over abc@myhost .

... однако удаленный sshd интерпретирует значение как user@host и выглядит как ...

Нет, я думаю, что ваш местный ssh интерпретирует это.

В моем Debian первый аргумент, который не может быть интерпретирован как опция, интерпретируется ssh как host или user@host , в зависимости от того, присутствует ли @ или нет. После этого никакой другой аргумент не интерпретируется таким образом, даже если в нем есть @ .

Теперь некоторые наблюдения:

  • user из user@host имеет приоритет над -o User=abc ,
  • но host (автономный или от user@host) подавляется параметром -o HostName=myhost .

Вывод: при использовании -o HostName=myhost host не имеет значения. Это делает возможным следующее:

ssh -i id_rsa_mykey -o User=abc -o HostName=myhost dummy_host foo@bar

Благодаря наличию dummy_host , foo@bar передается удаленной стороне как команда, даже если она содержит символ @ . Тем не менее, ssh подключается к myhost , а не к dummy_host , потому что -o HostName=myhost имеет приоритет.

Примечание: dummy_host может быть или не быть myhost . Это может даже быть пустым ("").

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