经过大量研究后,我找不到解决方案,但发布了这个问题。
我有一台电脑A和B都是Ubuntu桌面。我想将文件从A复制到B.我遵循的步骤。1. ssh-keygen in computer A
2. Left password blank
3. Copied id_rsa.pub to computer B ~/.ssh/ from computer A
4. Renamed id_rsa.pub to authorized_keys in computer B
5. In computer A I did scp -i ~/.ssh/id_rsa -r /var/www/abc abc@ip:/home/abc/
如果我在命令行执行第4步,它的工作正常。但是当我在crontab中做同样的事情时
22 10 * * * root scp -i ~/.ssh/id_rsa -r /var/www/abc abc@ip:/home/abc
它无所事事。
答案 0 :(得分:0)
为什么不尝试将scp命令放在bash脚本中并将bash脚本放在cron中,还记得将shebang放在sh脚本中,如下所示:#! / bin / bash(通常是路径,通过在shell中键入哪个bash来确认)。另外chmod a + x你的sh脚本使其可执行并从bash尝试sh脚本为./script.sh然后将它放在crontab中。
为什么scp命令在crontab中不起作用? 以下文章很好地解释了cron工作面临的各种问题 - https://askubuntu.com/questions/23009/reasons-why-crontab-does-not-work
在您的情况下,这是一个环境问题。 Crontab的环境与bash的环境不同。 希望这会有所帮助。
答案 1 :(得分:0)
第5步不起作用,也许第3步和第4步效果不佳。
3. Copied id_rsa.pub to computer B ~/.ssh/ from computer A
4. Renamed id_rsa.pub to authorized_keys in computer B
你应该使用命令" ssh-copy-id"复制.pub文件。
答案 2 :(得分:0)
在crontab中,你只需执行命令行而没有交互式shell的所有好处,即填充的PATH变量,以及所有其他bash技巧,例如~
解释(不确定最后一个) )。
因此规则始终使用crontab中的完整路径:
22 10 * * * root /usr/bin/scp -i /home/username/.ssh/id_rsa -r /var/www/abc abc@ip:/home/abc
答案 3 :(得分:0)
我几乎尝试了与问题相关的每个答案。答案是偶然发生的。
我输入的是用户名而不是root用户。我不知道它是如何运作的。希望这能帮助像我这样的人。
2 10 * * * root /usr/bin/scp -i /home/username/.ssh/id_rsa -r /var/www/abc abc@ip:/home/abc
2 10 * * * username /usr/bin/scp -i /home/username/.ssh/id_rsa -r /var/www/abc abc@ip:/home/abc
答案 4 :(得分:0)
这是我的解决方案。使用Jessie OS在Raspberry中制作。
使用无密码的公共密钥修复与服务器的连接。您到处都可以找到教程。 事情是与创建crontab的用户相同。 就我而言,我以PI(Raspberry上的用户)作为密钥。确保您可以在没有密码的情况下登录服务器。
然后,我创建了我的脚本,该脚本每5分钟将目录中的所有txt文件上载到服务器。 例如:
“#!/ bin / bash scp /mnt/www/hus/*.txt xxxxxx.se@ssh.xxxxx.se:/ www / images / hustemp“
将其另存为主目录中的xxxxxxx.sh并使其可执行(chmod + x xxxxxxx.sh)。
然后创建cronjob。我认为您必须在主目录中,只需运行crontab -e(前面没有sudo)并编辑所需的内容即可。就我而言: * / 5 * * * * /home/pi/upload.sh
效果很好!
祝你好运 安德斯