상호 작용 없이 한 서버를 비밀번호로 보호된 다른 서버로 SFTP하는 방법은 무엇입니까?

상호 작용 없이 한 서버를 비밀번호로 보호된 다른 서버로 SFTP하는 방법은 무엇입니까?

한 서버에서 다른 서버로 파일을 전송 sftp하고 이를 스크립트에 포함하고 싶습니다. 하지만 문제는 대상 서버가 비밀번호로 보호되는 서버라는 것입니다. 따라서 비밀번호 프롬프트가 나타나면 비밀번호를 입력해야 합니다.

스크립트에 포함하면 사용자 상호 작용이 필요하지 않습니다. 비밀번호 자체를 얻어야합니다. (비밀번호를 알고 있는데 어떻게 스크립트에 포함시켜 자동으로 받을 수 있나요?)

누구든지 도와줄 수 있나요? 많이 검색했지만 적절한 답변을 찾지 못했습니다. 프로덕션 서버에서 작업 중이기 때문에 연결 비밀번호를 줄일 수 없습니다. 그래서 서버를 수정할 수 없습니다. 하지만 내 스크립트가 자체적으로 처리하기를 원합니다. 도와주세요.

답변1

당신이 원하는 것은 ssh-key와 매우 비슷합니다. 이를 통해 비밀번호가 필요하지 않은 "신뢰할 수 있는" 네트워크를 만들 수 있습니다. 이는 또한 스크립트에 일반 텍스트 비밀번호가 없도록 추가 보안을 제공합니다.

소스 머신에서:

ssh-keygen -t rsa -b 2048
Enter file in which to save the key (/root/.ssh/id_rsa): [Hit Enter]
Enter passphrase (empty for no passphrase): [Hit Enter]
Enter same passphrase again: [Hit Enter]
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.

이제 공개 키를 대상 서버에 복사합니다.

ssh-copy-id [email protected]
[OR]
cat ~/.ssh/id_rsa.pub | ssh [email protected] "mkdir -p ~/.ssh && cat >>  ~/.ssh/authorized_keys"

이제 스크립트에서:

sftp -o "IdentityFile=/root/.ssh/id_rsa" [email protected]

아니면 이렇게 할 수도 있습니다:

read -s -p "Enter Password: " password
sshpass -p $password sftp [email protected]

어디:

  • -s: 화면에 비밀번호를 표시하지 않음
  • -p: "password:": 문자 메시지 표시
  • 비밀번호: 비밀번호를 저장하는 Bash 변수

관련 정보