como definir a opção do subsistema sftp -s em um arquivo de configuração

9

O comando sftp suporta uma opção de subsistema (-s) que permite ao usuário remoto selecionar o executável do sftp-server remoto e, opcionalmente, atualizar para o sudo no processo da seguinte forma:

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

Este comando adia para as opções do cliente ssh em ~ / .ssh / config, permitindo o uso transparente de pubkey e configurações personalizadas de porta e usuário.

No entanto, subsystem parece ser específico do sftp e, portanto, não é definido no arquivo de configuração e parece que ele deve ser definido como uma opção de linha de comando para o sftp.

No entanto, algumas ferramentas envolvem a invocação do sftp para que seja impossível definir a opção do subsistema e, portanto, ficar com o acesso do usuário.

Existe algum arquivo de opção de configuração que eu possa usar para definir isso para o openssh sftp em geral?

existe algum arquivo de configuração para efetuar a maneira como o gnome nautilus invoca o sftp para sua integração com o gerenciador de arquivos?

Atualizar possível solução de hacky mas funcional é ...

Então acontece que não há nenhum arquivo de configuração óbvio que o sftp usará para opções, então acabei modificando um script wrapper genérico para adicionar a opção explicitamente para meus hosts selecionados colocando isso no meu caminho;

#!/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

No entanto dependendo do seu arquivo sudoers, geralmente para rodar sudo requer um tty, então você tem que passar a opção "-t" para ssh, e adivinhe? não há nenhuma opção de configuração para o comando do cliente ssh documentado que funciona nos arquivos ssh_config ou ~ / .ssh / config. haha.

Então eu escrevo outro script wrapper para fornecer isso ....

#!/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"

embora, agora eu esteja tendo problemas para fazer o sftp usar meu arquivo wrapper ~ / bin / ssh, já que ele parece ser codificado em sftp e controlado por uma opção "-S"

    
por Tom H 21.02.2012 / 18:56

1 resposta

1

De acordo com a página ssh_config(5) man, você pode configurar o caminho no arquivo de configuração 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.

Então parece que você poderia fazer isso de maneira simples:

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

Esta configuração obviamente vai para o servidor , não na configuração do cliente. É isso que você estava procurando? A desvantagem, obviamente, é que todas as conexões do sftp tentam rodar com privilégios de root, então isso quebrará o acesso não-root aos seus arquivos.

    
por 22.02.2012 / 22:53