답변:
스크립팅 된 ssh 로그인에는 암호없이 키 파일을 사용해야합니다. 이것은 분명히 보안 위험이므로 키 파일 자체가 적절하게 보호되도록주의하십시오.
ssh -i
클라이언트 측에서 항상 가능해야합니다. 서버가 모든 키 유형 (예 : ECDSA)을 지원하지 않을 수 있다는 의미입니까? 그것은 중요한 문제는 아니지만 ssh-keygen -t
. 내가 뭔가를 놓치고 있습니까?
rsync -e
및ssh -i
.
"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
sshpass -p`cat .password` ssh [...]
있습니다.. 그런 다음 사용자 만 읽을 수 있도록 .password
파일을 보호하십시오 chmod 400 .password
.
src_path
과 같이 server : path 여야합니다.server01.mydomain.local:/path/to/folder
-a
rsync를에 스위치가 포함 -rlptgoD
:이 같은 명령을 단축 할 수rsync -az ...
rsync
환경 변수 RSYNC_PASSWORD
를 사용하려는 암호 로 설정 하거나 --password-file
옵션 을 사용하여 명령 에서 암호 프롬프트를 피할 수 있습니다 .
공개 / 비공개 키를 사용할 수없는 경우 다음과 같이 사용할 수 있습니다.
#!/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를 비밀번호로 바꿔야합니다. 이 파일이 안전하게 저장되었는지 확인하십시오!
Red Hat Enterprise Linux Server release 5.11 (Tikanga)
다음과 같이 작동하도록했습니다.
sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir remote_user@remote_host:/remote_dir
remote_port_ssh
으로 설정됩니까? 실제 값에 대한 자리 표시 자처럼 보입니다.
ssh 키를 사용하십시오.
봐 ssh-keygen
와 ssh-copy-id
.
그런 다음 다음과 같이 사용할 수 있습니다 rsync
.
rsync -a --stats --progress --delete /home/path server:path
또 다른 흥미로운 가능성 :
rsync --partial --progress --rsh = "ssh -i dsa_private_file"host_name @ host : / home / me / d.
참고 : RSA / DSA 개인 키인 -i dsa_private_file
기본적으로이 접근 방식은 @Mad Scientist가 설명한 접근 방식과 매우 유사하지만 개인 키를 ~ / .ssh에 복사 할 필요는 없습니다. 즉, 임시 작업 (비밀번호없이 한 번만 액세스)에 유용합니다.
다음은 나를 위해 작동합니다.
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
저는 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}"
공식 솔루션 (및 기타)은 처음 방문했을 때 불완전했기 때문에 몇 년 후 공개 / 개인 키 쌍을 사용하려는 다른 사람이 여기에 올 경우를 대비하여이 대체 방법을 게시하기 위해 돌아 왔습니다.
소스에서 타겟 백업으로 가져 오는 타겟 백업 머신에서 실행
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 키 쌍을 사용 하기위한 것입니다.)
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