[linux] scp에 비밀번호를 전달하는 방법?

권장하지는 않지만 사용자 암호를 scp에 전달하는 것이 가능합니까?

배치 작업의 일부로 scp를 통해 파일을 복사하고 싶습니다. 수신 서버는 물론 암호가 필요합니다. 아니요. 키 기반 인증으로 쉽게 변경할 수는 없습니다.



답변

expect 와 같은 도구로 스크립트를 작성할 수 있습니다 ( Pexpect for Python 과 같은 편리한 바인딩도 있습니다 ).


답변

sshpass를 사용하십시오 .

sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path

암호가 bash 기록에 표시되지 않습니다.

sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path

위의 내용은 원격 호스트에서 로컬로의 경로 내용을 복사합니다.

설치 :

  • 우분투 / 데비안
    • apt install sshpass
  • 센 토스 / 페도라
    • yum install sshpass
  • 맥 포트가있는 맥
    • port install sshpass
  • 양조 한 맥
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

답변

다음과 같이 ssh 키를 생성하십시오.

ssh-keygen -t rsa -C "your_email@youremail.com"

내용을 복사하여 ~/.ssh/id_rsa.pub
마지막으로 원격 시스템에 추가~/.ssh/authorized_keys

원격 시스템에 권한이 있는지 확인 0700 for ~./ssh folder하고0600 for ~/.ssh/authorized_keys


답변

Windows에서 서버에 연결하는 경우 Putty 버전의 scp ( “pscp”)를 사용하면 -pw매개 변수 와 함께 비밀번호를 전달할 수 있습니다 .

이것은 여기 문서에 언급되어 있습니다.


답변

curl은 파일을 복사하기 위해 scp 대신 사용할 수 있으며 명령 행에서 비밀번호를 지원합니다.

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/


답변

유닉스 / 터미널에서 ‘expect’스크립트를 사용할 수 있습니다

예를 들어 ‘test.exp’를 작성하십시오.

#!/usr/bin/expect
        spawn scp  /usr/bin/file.txt root@<ServerLocation>:/home
        set pass "Your_Password"
        expect {
        password: {send "$pass\r"; exp_continue}
                  }

스크립트를 실행

expect test.exp

도움이 되길 바랍니다.


답변

다음은 expect도구 를 사용 하여 수행하는 방법의 예입니다 .

sub copyover {
    $scp=Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}
+/$file");
    $scp->expect(30,"ssword: ") || die "Never got password prompt from
+ $dest:$!\n";
    print $scp 'password' . "\n";
    $scp->expect(30,"-re",'$\s') || die "Never got prompt from parent
+system:$!\n";
    $scp->soft_close();
    return;
}