No meu host local alpha
, tenho um diretório foo
que é mapeado via sshfs para hospedar da bravo
seguinte maneira:
$ sshfs charlie@bravo:/home/charlie ~/foo
No entanto, no host, bravo
existe outro usuário, delta, no qual eu quero sudo /bin/su
, para que eu possa trabalhar bravo:/home/delta
. delta
pode não estar logado via ssh; por razões que não posso alterar, você só pode executar o deldo quando estiver na máquina.
Normalmente eu ssh bravo
, então sudo to delta, mas estou me perguntando se há alguma maneira de fazer isso quando eu tiver o dir home de charlie montado via ssh.
Respostas:
Isso variará dependendo do sistema operacional do servidor ao qual você está se conectando. Para o centOS 5, você adicionaria às opções de montagem sshfs:
-o sftp_server="/usr/bin/sudo /usr/libexec/openssh/sftp-server"
Para o Ubuntu 9.10 (acho que pode ser o 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 o caminho correto para outros sistemas executando o openSSH, execute
sudo grep Subsystem /etc/ssh/sshd_config
e procure a localização do binário do servidor sftp.
Pode ser necessário configurar o sudo com o NOPASS: {caminho para o servidor sftp} ou prevalecer com,
ssh user@host sudo -v
para que hajasudo
um registro de data e hora atualizado paranotty
. No meu caso, meus dois comandos foram:fonte
sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"
:?ssh host sudo -v
não deixa meu sudo feliz - ele quer um tty antes de me deixar sudo. Pensamentos?ssh -t myuser@host sudo -v sshfs myuser@host:remote_path local_path -o sftp_server="/usr/bin/sudo -u root /usr/lib/openssh/sftp-server"
ele não funciona: \ - diz apenas "hosts remotos foram desconectados" #Você pode usar o bindfs + sshfs para acessar outros arquivos do usuário (inclusive o root).
Primeiramente você monta seu 'root' ou qualquer outro diretório no seu usuário com uid remapeado.
ssh -t USER@SERVER "mkdir ~/tmproot; sudo bindfs --map=root/USER / ~/tmproot"
e então simplesmente sshfs no diretório
sshfs USER@SERVER:tmproot TARGET
Mas, por segurança, é melhor não mapear a raiz inteira,
/
mas apenas a parte necessária. 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 em ~ / www e remapear a raiz para o usuário, para ter acesso total a ele.Se você precisa de acesso para preservar o uid ou ter acesso a vários usuários, eu criaria um novo usuário, por exemplo "rootfs" com uid = 0 e / bin / false e faria um sshfs normal.
fonte
Você pode tentar (mas acho que não vai funcionar):
Como não entendo muito bem o sshfs, é possível que algo assim funcione, mas 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 (supondo que funcionasse, o que também duvido), bem como o uso normal do ssh .
Desculpe por ser um debbie downer.
fonte
Por dedução, acho que isso é impossível de ser alcançado com um simples comando.
Isso ocorre porque o sshfs chama ssh sem passar nenhum comando, mas usa o SFTP, que é um subsistema do SSH.
Na página de manual do sshfs :
Além disso , alterar o usuário atual (ou 'su' ou 'sudo') não faz parte do protocolo SFTP, embora isso pareça um recurso solicitado com muita frequência.
fonte
Provavelmente, a melhor maneira é através de permissões de arquivo, 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 terá o seu$PWD
, convertê-lo para/home/delta/
e execute o comando através dessh
esudo
na máquina remota.Algo assim:
Depois disso, você pode executar
sudossh command
e lembre-se de usar caminhos relativos.Se você usa o ssh-agent, basta digitar sua
sudo
senha.fonte
Minha solução é assustadoramente feia (graças a algumas camadas de string escapando), mas ela lê o caminho para
sftp-server
partir/etc/ssh/sshd_config
e o executasudo
. Agora, e sesshd_config
não estiver localizado abaixo/etc/ssh
? Talvez pesquise dentro dessh
binário comstrings
egrep
?fonte