sshfs를 어떻게 sudo합니까? charlie@bravo:/home/charlie ~/foo 그러나

내 로컬 호스트 alpha에는 다음과 같이 foosshfs를 통해 호스트에 매핑 되는 디렉토리 가 bravo있습니다.

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

그러나 호스트 bravo에는 델타라는 다른 사용자 sudo /bin/su가있어서 작업을 수행 할 수 있습니다 bravo:/home/delta. deltassh를 통해 로그인하지 못할 수 있습니다. 내가 바꿀 수없는 이유 때문에, 당신은 기계에 일단 델타로 sudo 할 수 있습니다.

일반적으로 나는 ssh에 넣고 bravo델타에 sudo했지만 ssh를 통해 charlie의 홈 디렉토리가 마운트되었을 때 그렇게 할 수있는 방법이 있는지 궁금합니다.



답변

연결하려는 서버의 OS에 따라 다릅니다. centOS 5의 경우 sshfs 마운트 옵션에 추가합니다.

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

우분투 9.10 (9.04 일 수도 있지만 아마도 둘 다 동일 할 것입니다) 또는 데비안의 경우 다음을 추가하십시오.

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

openSSH run을 실행하는 다른 시스템의 올바른 경로를 찾으려면

sudo grep Subsystem /etc/ssh/sshd_config

sftp-server 바이너리의 위치를 ​​찾으십시오.

NOPASS : {sftp-server에 대한 경로}로 sudo를 설정하거나에 대한 시간 소인이 업데이트 ssh user@host sudo -v되도록 사전 검증해야 할 수도 있습니다 . 필자의 경우 두 명령은 다음과 같습니다.sudonotty

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"


답변

bindfs + sshfs를 사용하여 다른 사용자 파일 (루트도 포함)에 액세스 할 수 있습니다.

먼저 재 맵핑 된 uid를 사용하여 사용자 아래에 ‘root’또는 다른 디렉토리를 마운트하십시오.

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

그런 다음 단순히 디렉토리에 sshfs를 추가하십시오.

sshfs USER@SERVER:tmproot TARGET

그러나 보안을 위해 전체 루트를 매핑하지 않고 /필요한 부분 만 매핑 하는 것이 좋습니다. 예를 들어,이 방법을 사용하여 / var / www의 파일을 ~ / www에 파일로 루트하고 사용자에 루트를 다시 매핑하여 다른 사용자 디렉토리를 사용자에게 마운트 할 수 있습니다.

uid를 유지하거나 여러 사용자에게 액세스 할 수있는 액세스 권한이 필요한 경우 uid = 0 및 / bin / false를 사용하여 “rootfs”와 같은 새 사용자를 작성하고 일반 sshfs를 수행합니다.


답변

시도해 볼 수도 있지만 작동하지 않을 것이라고 생각합니다.

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

나는 sshfs를 잘 이해하지 못하므로 그런 식으로 뭔가를 얻을 수는 있지만 어떻게 말할 수는 없지만 조금 놀랐을 것입니다.

또 다른 가능성은 명령 ‘sudo / bin / su bravo’를 ~ / .ssh / rc에 넣는 것입니다.하지만 모든 fs 마운팅에 영향을 줄 것입니다 (작동한다고 가정하고 의심 스럽습니다) .ssh의 일반적인 사용 .

debbie downer가되어 죄송합니다.


답변

추론으로, 나는 이것이 간단한 명령으로 는 불가능하다고 생각합니다 .

이는 sshfs가 명령을 전달하지 않고 ssh를 호출하지만 SSH의 하위 시스템 인 SFTP를 사용 하기 때문 입니다.

로부터 SSHFS의 맨 페이지 :

원격 컴퓨터에서는 SSH의 SFTP 하위 시스템이 사용됩니다.

또한 현재 사용자 (또는 ‘su’또는 ‘sudo’)를 변경하는 것은 SFTP 프로토콜의 일부가 아니지만 매우 자주 요청되는 기능처럼 보입니다.


답변

아마도 가장 좋은 방법은 @artifex가 제안한 것처럼 파일 권한을 이용하는 것입니다.

@Weboide가 말했듯이 sshfs를 통해 불가능합니다.

그러나 나는 당신이 현실을 부르 자, 간단한 스크립트를 만들 수있을 것 같아요 sudossh당신을 것이다 $PWD,로 변환 /home/delta/하고를 통해 명령을 실행 ssh하고 sudo원격 시스템에서.

이 같은:

#!/usr/bin/env bash

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

그 후 sudossh command상대 경로를 실행 하고 사용하는 것을 기억할 수 있습니다.

ssh-agent를 사용하는 경우 sudo비밀번호 만 입력하면 됩니다.


답변

내 솔루션입니다 cringingly 추한 (이스케이프 문자열의 몇 층 덕분에)하지만 경로를 읽어 sftp-server에서 /etc/ssh/sshd_config그것을 통해 실행합니다 sudo. 이제 sshd_config아래에 없으면 어떻게해야 /etc/ssh합니까? ssh이진 내에서 검색 strings하고 grep?

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


답변