【问题标题】:SCP not working in crontab but works on commandlineSCP 不在 crontab 中工作,但在命令行上工作
【发布时间】:2017-09-24 18:23:39
【问题描述】:

经过大量研究,我找不到解决方案,但发布了这个问题。

我有一台计算机 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

它什么都不做。

【问题讨论】:

标签: linux crontab scp


【解决方案1】:

你为什么不尝试将 scp 命令放在 bash 脚本中,并将 bash 脚本放在 cron 中,还记得将 shebang 放在你的 sh 脚本中,如下所示:#! /bin/bash (通常是 path ,通过在 shell 中输入 which 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 的环境不同。 希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我已经尝试了几乎所有与该问题相关的答案。答案只是意外而来。

    我输入了用户名而不是 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
    

    【讨论】:

    • 原因是私钥的拥有模式为0600,这意味着只有用户可以读取该文件。
    【解决方案3】:

    这是我的解决方案。使用 Jessie 操作系统在 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

    效果很好!

    祝你好运 安德斯

    【讨论】:

      【解决方案4】:

      第 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 文件。

      【讨论】:

      • 我在另一个区域尝试了这些步骤并且工作了。当我在两台 ubuntu 台式电脑上尝试时,它没有工作。
      • “ssh-copy-id”命令在两台 ubuntu 台式机上是否有效?
      • 是的 ssh-copy-id 不工作。它说主机名未解析。
      【解决方案5】:

      在 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
      

      【讨论】:

        【解决方案6】:

        对于那些在这个问题上苦苦挣扎的人,上面的所有答案都没有解决我的问题。实际上,您必须在终端中使用root 帐户执行 scp 一次,才能收到此消息:

        The authenticity of host 'XXXX (123.123.123.123)' can't be established.
        ECDSA key fingerprint is SHA256:XXXXXXXXXXXxxxxXXXxxXXXxxXXxXxxXXX.
        Are you sure you want to continue connecting (yes/no/[fingerprint])?
        

        然后你输入“yes”,你的下一个 crons 就会像魅力一样工作。

        【讨论】:

          猜你喜欢
          • 2017-04-14
          • 2019-02-11
          • 1970-01-01
          • 1970-01-01
          • 2016-09-09
          • 1970-01-01
          • 2021-06-27
          • 2022-06-14
          • 2018-03-25
          相关资源
          最近更新 更多