Como eu sudo em sshfs?

30

No meu host local alpha eu tenho um diretório foo que é mapeado via sshfs para hospedar bravo da seguinte forma:

$ sshfs charlie@bravo:/home/charlie ~/foo

No entanto, no host bravo , há outro usuário, delta, que eu quero para sudo /bin/su as, para que eu possa trabalhar em bravo:/home/delta . delta pode não ter efetuado login via ssh; Por razões que eu não posso mudar, você só pode sudo over to delta quando estiver na máquina.

Normalmente eu coloco ssh em bravo , depois sudo to delta, mas estou imaginando se há alguma maneira de fazer isso quando eu tiver o diretório home de charlie montado via ssh.

    
por dirtside 08.07.2010 / 00:27

6 respostas

33

Isso irá variar dependendo do sistema operacional do servidor ao qual você está se conectando. Para o centOS 5, você adicionaria às opções de montagem do sshfs:

-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"

Para o Ubuntu 9.10 (eu acho, pode ser 9.04, mas é provavelmente o mesmo para ambos) ou o Debian você adicionaria:

-o sftp_server="/usr/bin/sudo /usr/lib/openssh/sftp-server" .

Para encontrar um caminho correto para outros sistemas executando o openSSH run

sudo grep Subsystem /etc/ssh/sshd_config

e procure a localização do binário sftp-server.

Talvez seja necessário configurar o sudo com o NOPASS: {caminho para o sftp-server} ou pré-validar com ssh user@host sudo -v , para que sudo tenha um registro de data e hora atualizado para notty . No meu caso, meus dois comandos foram:

ssh login_user@host sudo -v
sshfs login_user@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u as_user /usr/lib/ssh/sftp-server"
    
por 09.07.2010 / 18:40
2

Você pode usar o bindfs + sshfs para acessar outros arquivos do usuário (até mesmo o root).

Primeiramente, você monta seu 'root' ou qualquer outro diretório sob seu usuário com o ufp remapeado.

ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"

e depois simplesmente sshfs no diretório.

sshfs USER@SERVER:tmproot TARGET

Mas, para segurança, é melhor não mapear a raiz inteira / , mas apenas a parte que você precisa. Por exemplo: Você pode usar este método para montar qualquer outro diretório de usuário no seu, por exemplo, arquivos de / var / www para ~ / www e remapear o usuário para que você tenha acesso total a ele.

Se você precisar de acesso para preservar o uid ou tiver acesso a vários usuários, então eu criaria um novo usuário, por exemplo, "rootfs" com uid = 0 e / bin / false e faria um sshfs normal.

    
por 12.09.2017 / 14:19
0

Você pode tentar (mas não acho que funcionará):

sshfs -o ssh_command='ssh sudo /bin/su bravo' charlie@bravo:/home/charlie ~/foo

Eu não entendo muito bem o sshfs, então você pode conseguir algo assim para funcionar, mas eu não sei dizer como e ficaria um pouco surpreso.

Outra possibilidade é colocar o comando 'sudo / bin / su bravo' em ~ / .ssh / rc, mas isso afetaria todas as suas montagens fs (assumindo que funcionou, o que eu também duvido) assim como o seu normal uso de ssh.

Desculpe por ser um debbie downer.

    
por 08.07.2010 / 03:51
0

Por dedução, acho que é impossível alcançar em um comando simples.

Isso ocorre porque o sshfs chama o ssh sem passar nenhum comando, mas, em vez disso, usa o SFTP, que é um subsistema do SSH.

Na página de manual do sshfs :

On the remote computer the SFTP subsystem of SSH is used.

Mais , a alteração do usuário atual (ou 'su' ou 'sudo') não faz parte do protocolo SFTP, embora isso pareça ser um recurso muito solicitado.

    
por 08.07.2010 / 04:04
0

Provavelmente, a melhor maneira é através de permissões de arquivos, como o @artifex propõe.

Como o @Weboide diz, é impossível através do sshfs.

Mas eu acho que você poderia criar um script simples, vamos chamá-lo de sudossh que levará seu $PWD , converta para /home/delta/ e execute o comando através de ssh e sudo na máquina remota.

Algo parecido com isto:

#!/usr/bin/env bash

ssh -t charlie@bravo "cd 'pwd | sed 's/user\/foo/delta/''; sudo -u delta $*"

Depois disso, você pode executar sudossh command e lembrar de usar caminhos relativos.

Se você usa o ssh-agent, basta digitar sua senha sudo .

    
por 08.07.2010 / 11:27
0

Minha solução é cringingly feia (graças a algumas camadas de escape de string), mas ele lerá o caminho para sftp-server de /etc/ssh/sshd_config e executará através de sudo . Agora, e se sshd_config não estiver localizado em /etc/ssh ? Talvez pesquise dentro de ssh binary com strings e grep ?

#!/bin/sh
sshfs -o sftp_server="/bin/sh -c \"sudo \'sed -n '/Subsystem\\\\s\\+sftp\\\\s\\+/{s///;p}' /etc/ssh/sshd_config\'\"" "$@"
    
por 09.06.2018 / 19:38