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


297

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

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


2
또한 (나중에) 질문 : stackoverflow.com/questions/1462284/…를 참조하십시오. 여기서 하나의 답변은 다른 가능한 방법을 언급합니다. (NB : 이것은 중복 된 질문이 아닙니다. 다른 것이 복제 한 것이 아닙니다.)
Jonathan Leffler

답변:


35

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


1
expect.nist.gov에 대한 링크 가 깨졌습니다. 어쩌면 이것? : expect.sourceforge.net
Katapofatico

sudo apt-get 설치 예상
SDsolar

>> brew info sshpass 오류 : 이름이 "sshpass"인 사용 가능한 수식이 없습니다. SSH 사용자가 SSH 보안을 망칠 수 없기 때문에 sshpass를 추가하지 않습니다. ;)
Lukas NP Egger

528

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

14
Ubuntu 12.04에서는 암호를 작은 따옴표로만 처리했습니다 (예 : "password"대신 'password').
odedfos

6
@odedfos, 그렇습니다. 암호로 생성 된 일부 문자는 큰 따옴표로 묶인 문자열 보간에서 특별한 해석을 할 수 있기 때문에 작은 따옴표를 사용해야합니다
TerryE

7
sshpass를 설치하는 방법apt-get install sshpass
Jan-Terje Sørensen

6
CentOS에서는yum -y install sshpass
jgritty

19
이를 수행하는 가장 안전한 방법은 다음과 같이 비밀번호 파일 을 사용하는 것입니다 : sshpass -f passwdfile` scp [...] . This way, the password won't show up in ps` 목록 등 파일 비밀번호를 사용하여 비밀번호를 보호 할 수 있습니다.
Christopher Schultz

50

다음과 같이 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


35
내가 쓴 것처럼 : 아니요, 키 기반 인증으로 쉽게 전환 할 수 없습니다.
Argelbargel

3
.authorized_keys보다는을 의미합니까? authorization_keys?
HelloWorld

2
이것에 대한 올바른 사용은 원격 서버의 암호를 사용자에게 요청하려는 서버에 대해 여러 scp / ssh 호출을 수행하는 bash 스크립트입니다. 그러면 비밀번호가 기록에 표시되지 않으며 여전히 비밀번호에 도전 할 수 있지만 한 번만 가능합니다. 스크립트 사용자를 여전히 인증하고 싶어서 키 파일을 사용하고 싶지 않습니다.
웨스 그랜트

2
대상에서 키 기반 인증을 쉽게 활성화 할 수없는 경우 다른 유효한 용도가 있습니다. 예 : 주요 NAS 제작자 중 하나 인 DSM 6.0이 포함 된 Synology는 2016 년에도이를 지원하지 않습니다. 물론 구성 파일이 엉망이되어 업데이트가 다시 덮어 쓰지 않을 것으로 기대할 수 있습니다 (DSM을 자주 업데이트하면 사용자 지정 수정이 자주 중단됨) ). 때로는-특히 OP가 명시 적으로 작성했을 때 이미 최적이 아니라는 것을 사람들이 알고 있으면 사람들은 해결책이 필요합니다.
Aaa

3
ssh-copy-id -i ~/.ssh/id_rsa.pub <remote_server>원격 서버에서 키를 복사하는 데 사용해야 합니다
RousseauAlexandre

39

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

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


1
예를 보여주세요.
SDsolar

또한 이러한 명령을 사용하기 위해 C : \ Program Files (x86) \ PuTTY를 경로에 추가 할 수 있습니다.
SDsolar

1
@SDsolar 여기 구문 예제 : pscp -pw 'MyPa$$word' username@servername:/somedir/somefile ~/somedest(나는이 같은 퍼티를 사용하여 싫어,하지만 작동)
geneorama

29

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

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

'scp'보다 상당히 느리지 만 잘 작동합니다.
Victor

대상이 큰 암호 프롬프트 지연으로 구성되면이 속도가 더 빠릅니다. scp암호를 입력하려면 30 초 이상 기다려야하지만 curl즉시 작동했습니다.
Ghost8472

@ Ghost8472가 yes로 구성되었지만 때때로이 지연으로 인해 호스트 이름이 해결되고 sftp에서도 발생합니다.
mckenzm 2016 년

1
"curl : (1) 프로토콜"sftp "가 libcurl에서 지원되지 않거나 비활성화되었습니다"
kronuus

21

유닉스 / 터미널에서 '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 

도움이 되길 바랍니다.


7
전제 조건 : sudo apt-get 설치 예상
SDsolar

10

다음은 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;
}

2
이것은 펄입니다, 미안하지만 글을 쓰지 않았습니다. (5 년 전 :))
Espo 2016 년


3

ssh-copy-idssh 키를 추가 하는 데 사용할 수 있습니다 .

$which ssh-copy-id #check whether it exists

존재하는 경우 :

ssh-copy-id  "user@remote-system"

3

ssh-keygen위에서 설명한대로 설정 하면 할 수 있습니다

scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

매번 입력을 줄이려면 .bash_profile파일을 수정 하고

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

그런 다음 터미널에서 source ~/.bash_profile. 나중에 remote_scp터미널에 입력하면 scp암호없이 명령을 실행해야 합니다.


2
  1. 그렇지 않은 경우 수행하기 전에 "예상"도구가 있는지 확인하십시오.

    # apt-get install expect

  2. 다음 내용으로 스크립트 파일을 작성하십시오. (# vi / root / scriptfile)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. "expect"도구로 스크립트 파일을 실행하십시오

    # expect /root/scriptfile


1

이 블로그 게시물을 기반으로 한 가난한 사람의 Linux / Python / Expect와 유사한 예는 다음과 같습니다. 간단한 쉘을 완전한 대화식 TTY로 업그레이드 . Expect를 설치하거나 모듈을 Python에 추가 할 수없는 오래된 컴퓨터에이 기능이 필요했습니다.

암호:

(
    echo 'scp jmudd@mysite.com:./install.sh .'
    sleep 5
    echo 'scp-passwd'
    sleep 5
    echo 'exit'
) |

python -c 'import pty; pty.spawn("/usr/bin/bash")'

산출:

scp jmudd@mysite.com:install.sh .
bash-4.2$ scp jmudd@mysite.com:install.sh .
Password: 
install.sh                                 100%   15KB 236.2KB/s   00:00    
bash-4.2$ exit
exit

0

대안은 사용자 키의 공개 절반을 대상 시스템의 인증 된 키 파일에 추가하는 것입니다. 전송을 시작한 시스템에서 ssh-agent 데몬을 실행하고 키의 개인 절반을 에이전트에 추가 할 수 있습니다. 그런 다음 키 비밀번호를 묻지 않고 에이전트를 사용하여 개인 키를 가져 오도록 배치 작업을 구성 할 수 있습니다.

이것은 pageant 및 pscp를 사용하는 UNIX / Linux 시스템 또는 Windows 플랫폼에서 가능해야합니다.


4
이 질문에 따르면 키 기반 인증을 사용할 수 없습니다.
Barmar

2
또한 그것이 나이라면 다른 서버를 변경할 수 없다고 가정합니다. 원하는 것은 파일을 복사하는 것입니다.
SDsolar

-1

위에서 언급 한 모든 솔루션은 앱을 설치했거나 sshpass를 제외하고 설치할 관리자 권한이 있어야 작동합니다.

백그라운드에서 scp를 시작하는 데 매우 유용한 링크를 찾았습니다.

$ nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1

https://charmyin.github.io/scp/2014/10/07/run-scp-in-background/


1
백그라운드에서 scp를 실행하면 어떻게 암호가 입력됩니까?
thomas.han


-9

이 답변이 정말 도움이 되었습니다 .

rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/

비밀번호를 전달할 수있을뿐만 아니라 복사 할 때 진행률 표시 줄이 표시됩니다. 정말 대단합니다.


22
그리고 정확히 여기에 비밀번호를 제공하고 있습니까?
infografnet
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.