2011-12-21 3 views

답변

0

user1로 scp를 수행하는 것이 더 쉽지 않으므로 파일을 user2로 chown 하시겠습니까? user2에만 액세스 할 수있는 위치에 저장해야하는 경우 user2에 su를 사용하여 이동할 수 있습니다.

+0

더 도움이됩니다. 파일의 소유권을 변경할 수 없습니다. – user1109632

0

hostC (클라이언트)에 있고 userX @ hostA에서 userY @ hostB로 파일을 복사한다고 가정 해보십시오.

당신은 hostC 상에 scp 명령을 실행할 수 있습니다 :

scp [email protected]:file-to-copy [email protected]:destination-folder/ 

그러나, 당신은 인증 할 필요가있다. userX @ hostA 키 인증을 위해 ssh 키를 설정 한 경우 키 인증이 정상적으로 작동합니다.

그러나 scp은 에이전트 전달 또는 clear forwarding 키를 비활성화하는 옵션을 사용하여을 호출하므로 userY @ hostB에 대한 키가 있어도 hostB에는 사용할 수 없으며 암호를 묻는 메시지가 표시됩니다 .

이 해결책 중 하나는 scp에 이라는 -S <ssh-command>을 전달하여 명시 적으로 활성화해야하는 에이전트 포워딩을 방지하는 옵션을 제거하는 래퍼 스크립트를 사용하는 것입니다.

scp를 호출

ssh-wrapper.py

#!/usr/bin/python 

import sys, os 

def is_exe(fpath): 
    return os.path.exists(fpath) and os.access(fpath, os.X_OK) 

def which(program): 
    fpath, fname = os.path.split(program) 
    if fpath: 
    if is_exe(program): 
     return program 
    else: 
    for path in os.environ["PATH"].split(os.pathsep): 
     exe_file = os.path.join(path, program) 
     if is_exe(exe_file): 
     return exe_file 
    return None 

if __name__ == '__main__': 
    ssh = which('ssh') 
    assert ssh is not None 
    args = [ssh] + sys.argv[1:] 
    for x in ('-a','-oClearAllForwardings yes'): 
    if x in args: 
     args.remove(x) 
    if '-oForwardAgent yes' not in args: 
    args.insert(1,'-oForwardAgent yes') 
    os.execl(ssh,*args) 

:

지금까지
scp -S ssh-wrapper.py [email protected]:file-to-copy [email protected]:destination-folder/ 
+0

'scp'가 명시 적으로이 작업을 수행하지 못하게하므로 의심스러운 보안 상태라고 생각합니다. 사용자 정보를 남용하지 않기 위해'userA'를 완전히 신뢰해야합니다. – MattH

+0

귀하의 빠른 답변을 위해 Matt에 감사드립니다. 그러나 제 질문을받지 않기를 바랍니다. 나는 HostC 서버에있는 쉘 스크립트를 동일한 서버 HostC에 로그인하지만 다른 사용자 ID (user2)로 로그인하고 다른 서버 HostB에서 파일을 복사하고 거기에 파일 (서버 HostC)을 유지합니다. 파일의 소유자는 userid (user2)입니다. – user1109632

+0

어떤 경우에는 :'scp -S ssh-wrapper.py userX @ HostB : 파일 to 복사 user2 @ HostC : 목적지 폴더 /' – MattH

관련 문제