Answers:
对于脚本化的ssh登录,应使用不带密码的密钥文件。这显然是安全隐患,请注意密钥文件本身已得到充分保护。
ssh -i
在客户端始终应该是可能的。您是说服务器可能不支持所有密钥类型(例如ECDSA)吗?不过,这不是主要问题,仅是使用的一种情况ssh-keygen -t
。我想念什么吗?
rsync -e
以及ssh -i
。
使用“ sshpass”非交互式ssh密码提供程序实用程序
在Ubuntu上
sudo apt-get install sshpass
命令同步
/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
选项,可以避免在命令中提示密码。
如果您不能使用公钥/私钥,则可以使用Expect:
#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
puts "rsync failed"
exit 1
}
exit 0
您将需要用常规的rsync源和目标参数替换SRC和DEST,并用密码替换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
尽管您已经实现了它,
你也可以使用任何期望的实现(你会发现在Perl,Python中选择:Pexpect的,的paramiko等。)
当我第一次访问时,官方解决方案(和其他解决方案)并不完整,因此,几年后,我回来发布了这种替代方法,以防万一其他人打算使用公共/私有密钥对:
从目标备份计算机执行此操作,该备份计算机从源备份到目标备份
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
并通过向每个用户发送来验证源和目标用户中的用户是否具有其他人各自的公共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