서버 A (userid로 user1)가 있습니다. 사용자 2와 동일한 서버 ServerA에 연결하고 다른 서버에서 파일을 가져 와서 ServerA에 보관하려면 scp를 수행하고 싶습니다. 서버 (user2는 user2).쉘 스크립트에서 ssh 내부에서 scp를 사용하는 방법
누구든지 최대한 빨리 도와주세요.
서버 A (userid로 user1)가 있습니다. 사용자 2와 동일한 서버 ServerA에 연결하고 다른 서버에서 파일을 가져 와서 ServerA에 보관하려면 scp를 수행하고 싶습니다. 서버 (user2는 user2).쉘 스크립트에서 ssh 내부에서 scp를 사용하는 방법
누구든지 최대한 빨리 도와주세요.
user1로 scp를 수행하는 것이 더 쉽지 않으므로 파일을 user2로 chown 하시겠습니까? user2에만 액세스 할 수있는 위치에 저장해야하는 경우 user2에 su를 사용하여 이동할 수 있습니다.
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/
'scp'가 명시 적으로이 작업을 수행하지 못하게하므로 의심스러운 보안 상태라고 생각합니다. 사용자 정보를 남용하지 않기 위해'userA'를 완전히 신뢰해야합니다. – MattH
귀하의 빠른 답변을 위해 Matt에 감사드립니다. 그러나 제 질문을받지 않기를 바랍니다. 나는 HostC 서버에있는 쉘 스크립트를 동일한 서버 HostC에 로그인하지만 다른 사용자 ID (user2)로 로그인하고 다른 서버 HostB에서 파일을 복사하고 거기에 파일 (서버 HostC)을 유지합니다. 파일의 소유자는 userid (user2)입니다. – user1109632
어떤 경우에는 :'scp -S ssh-wrapper.py userX @ HostB : 파일 to 복사 user2 @ HostC : 목적지 폴더 /' – MattH
더 도움이됩니다. 파일의 소유권을 변경할 수 없습니다. – user1109632