rsync SSH 명령에 대한 암호를 자동으로 전달하는 방법은 무엇입니까?


111

내가 할 필요 rsyncssh와의 암호를 통과 할 필요없이 자동으로 수행 할 ssh수동으로.

답변:


44

스크립팅 된 ssh 로그인에는 암호없이 키 파일을 사용해야합니다. 이것은 분명히 보안 위험이므로 키 파일 자체가 적절하게 보호되도록주의하십시오.

암호없는 SSH 액세스 설정 지침


9
명령 텍스트에 암호를 넣을 가능성이 없습니까?
liysd

3
아니 쉽게 SSH에 대한 옵션이 없습니다
미친 과학자

이것이 항상 가능한 것은 아닙니다 (예 : 많은 안드로이드 ssh 서버 구현이 매우 제한적 임).
Ponkadoodle

@Ponkadoodle OP는 서버 측이 아닌 클라이언트 측 요청에 관한 것입니다. ssh -i클라이언트 측에서 항상 가능해야합니다. 서버가 모든 키 유형 (예 : ECDSA)을 지원하지 않을 수 있다는 의미입니까? 그것은 중요한 문제는 아니지만 ssh-keygen -t. 내가 뭔가를 놓치고 있습니까?
Jonathan H

1
처음에는 번거로울 수 있지만 정답입니다. 암호는 민감한 정보이므로 명확하게 저장하거나 프로그램에서 부주의하게 사용해서는 안됩니다. 이것이 바로 키 파일의 용도입니다. 단지에 대한 자세한 내용 신원 파일 rsync -essh -i .
Jonathan H

94

"sshpass"비대화 형 ssh 암호 공급자 유틸리티 사용

Ubuntu에서

 sudo apt-get install sshpass

rsync 명령

 /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path  dest_path

4
이것이 모범 사례가 아니라는 것을 알고 있지만 키 기반 인증을 수행하지 않는 장애가있는 SSHD가있는 NAS가 있습니다. 이 대답은 자동 백업 퍼즐에서 빠진 부분이었습니다. 따라서 마지막 리조트 답변에 +1
Mike Gossmann 2013

8
키 파일을 사용할 수 없지만 명령에 비밀번호를 포함하지 않으려면 임시 파일에 작성하고 다음과 같이 포함 할 수 sshpass -p`cat .password` ssh [...]있습니다.. 그런 다음 사용자 만 읽을 수 있도록 .password파일을 보호하십시오 chmod 400 .password.
lutuh

5
완전성을 위해, 원격 서버에 ssh'ing하는 경우에는 다음 src_path과 같이 server : path 여야합니다.server01.mydomain.local:/path/to/folder
harperville

이것은 확실히 정답입니다! ssh 매직없이 스크립팅을 할 수 있습니다. ;) Kudos @Rajendra
genuinefafa

1
이후 -arsync를에 스위치가 포함 -rlptgoD:이 같은 명령을 단축 할 수rsync -az ...
쟈니 Theunissen

24

rsync환경 변수 RSYNC_PASSWORD를 사용하려는 암호 로 설정 하거나 --password-file옵션 을 사용하여 명령 에서 암호 프롬프트를 피할 수 있습니다 .


41
대상 서버에 rsync 데몬이 실행중인 경우에만 작동합니다
Darryl Hebbes 2013 년

4
이 답변은 rsync 데몬을 사용하지 않는 한 도움이되지 않지만 Google은 나를 여기로 데려왔고 정확히 필요한 것입니다. 나를 위해 rsyncd에 직접 rsync가 필요했으며 ssh가 필요했습니다. 방금 암호 파일 옵션을 사용했고 스크립트에 완벽하게 작동했습니다.
gregthegeek

14

공개 / 비공개 키를 사용할 수없는 경우 다음과 같이 사용할 수 있습니다.

#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
    puts "rsync failed"
    exit 1
}
exit 0

SRC 및 DEST를 일반 rsync 소스 및 대상 매개 변수로 바꾸고 PASS를 비밀번호로 바꿔야합니다. 이 파일이 안전하게 저장되었는지 확인하십시오!


3
이 명령은 내에서 사용할 수 없습니다Red Hat Enterprise Linux Server release 5.11 (Tikanga)
To Kra

13

다음과 같이 작동하도록했습니다.

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  remote_user@remote_host:/remote_dir

무엇 remote_port_ssh으로 설정됩니까? 실제 값에 대한 자리 표시 자처럼 보입니다.
Max Williams

6

ssh 키를 사용하십시오.

ssh-keygenssh-copy-id.

그런 다음 다음과 같이 사용할 수 있습니다 rsync.

rsync -a --stats --progress --delete /home/path server:path

ssh와 함께 키를 사용하면 다음과 같이 작성합니다. ssh u @ serv -i ./rsa하지만 rsync에서 어떻게할까요?
liysd

2
키를 .ssh 디렉토리에 넣고 표준 이름 (일반적으로 id_rsa / id_rsa.pub)을 지정하면 rsync에 의해 자동으로 선택됩니다.
Craig Trader

6

또 다른 흥미로운 가능성 :

  1. RSA 또는 DSA 키 쌍 생성 (설명 된대로)
  2. 공개 키를 호스트에 넣기 (이미 설명했듯이)
  3. 운영:
rsync --partial --progress --rsh = "ssh -i dsa_private_file"host_name @ host : / home / me / d.

참고 : RSA / DSA 개인 키인 -i dsa_private_file

기본적으로이 접근 방식은 @Mad Scientist가 설명한 접근 방식과 매우 유사하지만 개인 키를 ~ / .ssh에 복사 할 필요는 없습니다. 즉, 임시 작업 (비밀번호없이 한 번만 액세스)에 유용합니다.


5

다음은 나를 위해 작동합니다.

SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root"  source-path  myDomain:dest-path  >&2

나는 설치해야했다 sshpass


2
-a는 이미 -rlptgoD를 의미하며 일반적으로 여기에 명령 줄을 줄이는 것이 훨씬 더 유용합니다.
Christian

4

rsync 명령에 대한 암호를 자동으로 입력하는 것은 어렵습니다. 문제를 피하는 간단한 해결책은 백업 할 폴더를 마운트하는 것입니다. 그런 다음 로컬 rsync 명령을 사용하여 마운트 된 폴더를 백업합니다.

mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp

3

지금까지 이미 구현했지만

또한 모든 예상 구현을 사용할 수 있습니다 (Perl, Python : pexpect, paramiko 등에서 대안을 찾을 수 있습니다.)


2

저는 Windows 플랫폼에서이 작업을 수행하기 위해 VBScript 파일을 사용합니다.

set shell = CreateObject("WScript.Shell")
shell.run"rsync -a Name@192.168.1.100:/Users/Name/Projects/test ."
WScript.Sleep 100
shell.SendKeys"Your_Password"
shell.SendKeys "{ENTER}"

2

공식 솔루션 (및 기타)은 처음 방문했을 때 불완전했기 때문에 몇 년 후 공개 / 개인 키 쌍을 사용하려는 다른 사람이 여기에 올 경우를 대비하여이 대체 방법을 게시하기 위해 돌아 왔습니다.

소스에서 타겟 백업으로 가져 오는 타겟 백업 머신에서 실행

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/

소스에서 타겟 백업으로 보내는 소스 머신에서 실행합니다.

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/

그리고 ssh에 대해 대체 포트를 사용하지 않는 경우 아래의 더 우아한 예를 고려하십시오.

소스에서 대상 백업으로 가져 오는 대상 백업 머신에서 다음을 실행합니다.

sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/

소스에서 타겟 백업으로 전송하는 소스 머신에서 다음을 실행합니다.

sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/

여전히 암호를 입력하라는 메시지가 표시되는 경우 ssh 구성을 /etc/ssh/sshd_config확인하고 소스 및 대상의 사용자가 .NET을 통해 각각을 전송하여 각기 다른 공개 SSH 키를 가지고 있는지 확인해야합니다 ssh-copy-id user@10.9.9.3.

(다시 말하지만 이것은 파일을 통해 암호를 전달하는 것이 아니라 대체 방법으로 암호없이 ssh 키 쌍을 사용 하기위한 것입니다.)


그리고 중요한 추가 사항은 대체 포트 예제에서 ssh를 개인 키 파일로 보내고 대상에서 명령을 실행할 때 공개 키에 대해 인증한다는 것입니다.
oemb1905

-1

Andrew Seaford가 게시 한 아이디어에 따라 이것은 sshfs를 사용하여 수행됩니다.

echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.