我正在尝试制作一个 .sh 文件,cronjob 会偶尔运行该文件并自动执行 rsync。这是我的文件目前的样子:
#!/bin/bash
subdir=`hostname`
rsync -ah -e 'ssh -p 48180' /home/user/test
[email protected]:/var/www/html/xgplayer/events/"$subdir" -y
这是一个命令,必须将其减半,因为它太长,一行无法容纳。
我已将其设置为根据机器的主机名创建一个子目录(如果看起来也不错,请告诉我,我根据用于略有不同的目的的代码创建该子目录),该用户确实可以访问该子目录。(我只是为了某些原因而将用户称为用户,请忽略这一点)
我的问题是 -y 是否会让它自动同意存储 ssh 密钥,就像我尝试让它做的那样?另外,当它尝试以该用户身份登录以 rsync 文件时,如何让它通过我尝试在 ssh 中执行的命令自动输入密码?我认为有类似的东西可以做到这一点。任何帮助都将不胜感激 :)
如果有帮助的话,我在两台机器上都运行 Ubuntu Server 16.04 LTS。
编辑:不是特别棘手,但无论解决方案是什么,也必须能够放入.sh 文件中并在没有用户输入的情况下自行运行,这是针对一项非常具体的任务,抱歉。
编辑 2:根据某人的帮助请求执行此操作,因此,很遗憾我无法提供屏幕截图,但每当我运行列出的 rsync 命令时,以及每当我在新客户端上运行 ssh-keygen 尝试在该计算机上为该用户生成密钥时,它都会要求输入 10.3.10.110 上的用户的密码。我尝试使用它的应用程序要求完全自动化,这就是为什么这是一个问题。
编辑 2.5:一旦我运行 keygen 和 ssh-copy-id,它就不再在 rsync 时提示输入密码,但这将在许多机器上实现,对于这个项目,我不介意把它们放在某种设置.sh 文件中,但这些命令需要输入,这些输入需要自动化,以便我用于我的具体情况。
编辑 3:我发表了很多评论,因为我没有足够的代表来直接与试图帮助我的人聊天,因为我对这个网站还很陌生。
答案1
我发现我自己的答案对它做了更多的挖掘,我将发布关于如何完全自动化的答案以及一些帮助我做到这一点的有用链接:
#!/bin/bash
subdir=`hostname`
rsync -ah -e 'sshpass -p "password" ssh -p 48180 -o
StrictHostKeyChecking=no' /var/www/html/xgplayer/events
[email protected]:/var/www/html/xgplayer/events/"$subdir"
该 Rsync 命令全部为一个命令。有帮助的链接:
https://unix.stackexchange.com/questions/33271/how-to-avoid-ssh-asking-permission https://unix.stackexchange.com/questions/111526/rsync-without-prompt-for-password(第二个得票较高的答案最终比“最佳”答案更有帮助)
另外,显然需要在需要的地方用您的用户和密码替换用户和密码,而不是在这里发布它们。
感谢所有尝试提供帮助的人,你们确实在很大程度上帮助我找到了正确的方向!:)
答案2
使用选项:--password-file=rsync_pass
rsync -ah -e 'ssh -p 48180' --password-file=rsync_pass /home/user/test [email protected]:/var/www/html/xgplayer/events/"$subdir" -y
该文件rsync_pass
包含用户密码。