sshfs를 어떻게 sudo합니까?


35

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

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

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

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


2
이것은 파일 권한으로 가장 잘 해결 될 수 있습니다.
artifex

답변:


36

연결하려는 서버의 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"

1
고마워, 이것은 매우 깔끔한 '트릭'입니다. 난 그냥 "-u <some_other_user>"내 상황에 sudo를 추가
JOR

1
아주 훌륭하고 완벽하게 작동했습니다. 내 유일한 요점은 예제에 / usr / bin / sudo가 두 번 있다는 것입니다.
xaralis

1
@Craisis 오래된 게시물을 가져 와서 미안하지만 기본 사용자가있는 CentOS 6.5 서버에 ssh하고 싶지만 루트 액세스 전용 폴더를 마운트하고 싶습니다. 이것이 맞 sshfs basicuser@remotehost:remote_path local_mount_path -o sftp_server="/usr/bin/sudo -u root /usr/libexec/openssh/sftp-server"습니까?
Don Rhummy

1
ssh host sudo -v내 sudo를 행복하게하지 않습니다-sudo를 허용하기 전에 tty를 원합니다. 생각?
w00t

1
@eggo @Sebi @calandoa @xaralis debian 9에서 root로 sudo를 원한다면이 명령이 작동합니까? 내가 사용하는 경우 때문에 : 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"그것은 일을하지 않습니다 : \ - 그냥 "원격 호스트의 연결이 끊어있다"라고
user3450548

3

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를 수행합니다.


0

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

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가되어 죄송합니다.


0

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

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

로부터 SSHFS의 맨 페이지 :

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

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


불가능하지 않습니다. Craisis의 솔루션이 작동합니다.
Jayen

물론 그는 서브 시스템을 시작하고 sudo를 추가하는 명령을 무시하기 때문에 그렇습니다. 좋은 결과이지만 암호없이 sudo를 설정하거나 타임 스탬프를 사용해야 보안이 저하 될 수 있습니다. 그러나 OP가 실제로 원했기 때문에 논쟁하지는 않을 것입니다.
Weboide

0

아마도 가장 좋은 방법은 @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비밀번호 만 입력하면 됩니다.


0

내 솔루션입니다 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\`\"" "$@"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.