как установить опцию подсистемы sftp -s в файле конфигурации

11

Команда sftp поддерживает опцию подсистемы (-s), которая позволяет удаленному пользователю выбирать исполняемый файл удаленного sftp-сервера и, при необходимости, обновляться до sudo в процессе;

sftp -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" xxx.yyy.zzz.aaa

Эта команда относится к параметрам клиента ssh в ~ / .ssh / config, что позволяет прозрачно использовать параметры pubkey, пользовательский порт и пользовательские настройки.

Однако, subsystemпохоже, что это специфично для sftp, и, следовательно, он не задан в файле конфигурации, и кажется, что его нужно установить в качестве параметра командной строки для sftp.

Однако некоторые инструменты обертывают вызов sftp, поэтому невозможно установить опцию подсистемы и, следовательно, застрять в доступе пользователя.

Есть ли какой-нибудь файл опций конфигурации, который я могу использовать, чтобы установить его для openssh sftp в целом?

Есть ли какой-нибудь конфигурационный файл, позволяющий gnome nautilus вызывать sftp для интеграции с файловым менеджером?


Обновление возможного хаки-но-работающего решения ...

Таким образом, оказалось, что не существует очевидного файла конфигурации, который sftp будет использовать для опций, поэтому я закончил тем, что модифицировал универсальный скрипт-обертку, чтобы явно добавить опцию для выбранных хостов, поместив это в мой путь;

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/sftp
args=("$@")
#the final arg should contain a hostname of the form [user@]host[:path]
case "${args[@]: -1}" in
    myserver.com)
    exec $OPERATION -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server" "$args"
    ;;
*)
   exec $OPERATION "$args" 
    ;;
esac

Однако, в зависимости от вашего файла sudoers, обычно для запуска sudo требуется tty, поэтому вы должны передать опцию "-t" в ssh, и угадайте, что? нет заданного параметра конфигурации для команды клиента ssh, которая работает в файлах ssh_config или ~ / .ssh / config. ха - ха.

Поэтому я пишу другой скрипт-обертку, чтобы обеспечить это ....

#!/bin/bash
#  Generic shell wrapper that performs an operation

OPERATION=/usr/bin/ssh
args=("$@")
#locating the hostname is not so simple with ssh
exec $OPERATION -tt "$args"

хотя теперь у меня возникают проблемы с использованием sftp моего файла-оболочки ~ / bin / ssh, так как он, похоже, жестко запрограммирован в sftp и управляется опцией "-S"

Том Х
источник
Какова твоя цель? Я не понимаю никакой пользы от вашей команды.
jirib
3
Я запускаю ssh без имени пользователя root согласно нашей базовой сборке, поэтому он позволяет пользователям sudo вносить изменения в файлы с правами root с помощью инструментов, интегрируемых с gnome gvfs.
Том Х

Ответы:

2

Согласно ssh_config(5)man-странице, вы можете настроить путь в sshd_configфайле конфигурации:

 Subsystem
         Configures an external subsystem (e.g. file transfer daemon).
         Arguments should be a subsystem name and a command (with optional
         arguments) to execute upon subsystem request.

Похоже, вы могли бы просто сделать это:

Subsystem sftp /usr/libexec/openssh/sftp-server -s "/usr/bin/sudo /usr/libexec/openssh/sftp-server"

Эта конфигурация явно идет на сервер , а не в конфигурации клиента. Это то, что ты искал? Недостатком, очевидно, является то, что каждое соединение sftp будет пытаться работать с привилегиями root, поэтому это нарушит не-root доступ к вашим файлам.

larsks
источник
да, я искал что-то на стороне клиента. Хотя у меня есть идея, с которой я обновил вопрос.
Том Х
Хм, я действительно хотел бы иметь графический интерфейс, а также ответ командной строки. Я думаю, что larsks находится в правильных строках, но я думаю, что команда подсистемы на удаленном сервере должна быть сценарием, который сам может «знать» права пользователя, пытающегося войти в систему, или который может грациозно (и молча) возврат к стандартному логину sftp.
Джулиан Найт
Или, конечно, я могу просто использовать WinSCP на коробке Windows! Кажется глупым, хотя не так ли.
Джулиан Найт