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

11

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

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

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

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

No entanto, algumas ferramentas envolvem a chamada sftp, tornando impossível a opção de subsistema e, portanto, bloqueando 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 afetar a maneira como o gnome nautilus chama o sftp para sua integração com o gerenciador de arquivos?


Atualize a possível solução hacky-porém-funcional é ...

Portanto, verifica-se que não há um arquivo de configuração óbvio que o sftp usará para opções, então acabei modificando um script de wrapper genérico para adicionar a opção explicitamente aos 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 executar o sudo requer um tty, então você deve passar a opção "-t" para o ssh e adivinhe? não há opção de configuração para o comando do cliente ssh documentado que funciona nos arquivos ssh_config ou ~ / .ssh / config. haha

Então, 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"

no entanto, agora estou tendo problemas para fazer com que o sftp use meu arquivo wrapper ~ / bin / ssh, pois ele parece estar codificado no sftp e controlado por uma opção "-S"

Tom H
fonte
Qual é o teu objetivo? Eu não entendo nenhum benefício do seu comando.
jirib
3
Eu executo o ssh sem logins de usuário root, de acordo com nossa compilação básica, permitindo que os usuários do sudo façam alterações nos arquivos com permissões de root por meio de ferramentas que se integram ao gnome gvfs.
Tom H

Respostas:

2

De acordo com a ssh_config(5)página do manual, você pode configurar o caminho no sshd_configarquivo de configuração:

 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.

Portanto, parece que você poderia fazer isso simplesmente:

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

Essa configuração obviamente fica no servidor , não na configuração do cliente. Não é isso que você estava procurando? A desvantagem, obviamente, é que toda conexão sftp tentará executar com privilégios de root, portanto isso interromperá o acesso não root aos seus arquivos.

larsks
fonte
sim, estava procurando algo do lado do cliente. Embora eu tenha uma idéia com a qual atualizei a pergunta.
Tom H
Hmm, eu realmente gostaria de ter uma interface gráfica e resposta da linha de comando. Eu acho que o larsks está na linha certa, mas acho que o comando do subsistema no servidor remoto precisa ser um script que seja capaz de "conhecer" os direitos do usuário que está tentando fazer o login ou que seja capaz de graciosamente (e silenciosamente) failback para um logon sftp padrão.
Julian Knight
Ou, é claro, eu posso apenas usar o WinSCP em uma caixa do Windows! Parece idiota embora não seja.
Julian Knight