Когда я ввожу следующую команду в Putty, подключенном к серверу A. Мой файл копируется с сервера А на сервер Б.
sshpass -p 'myPass' scp userB@serverB_ip:/file.txt /home/XXXXXX.txt
Однако это не работает, когда я записываю его в файл .sh и выполняю задание crontab. Мой файл копии файла ShellfromB.sh выглядит следующим образом:
#!/bin/sh
echo "start"
sshpass -p 'myPass' scp userB@serverB_ip:/file.txt /home/XXXXXX.txt
echo "end"
(Я тоже устал от следующего, но тоже не работает)
/usr/bin/sshpass -p 'myPass' scp userB@serverB_ip:/file.txt /home/XXXXXX.txt
/usr/bin/sshpass -p 'myPass' /usr/bin/scp userB@serverB_ip:/file.txt /home/XXXXXX.txt
Мой файл crontab выглядит следующим образом:
0 1 * * * /usr/bin/sh /home/copyfilefromB.sh >> copyfilefromB.log
В файле журнала я могу прочитать только слова «начало» и «конец», ошибок не выводится, но процесс копирования не удался.
Могу ли я обратиться за помощью к вам, ребята? Кто-нибудь может помочь? Спасибо за ваш ответ.





когда вы впервые запускаете ssh или scp при предоставлении хоста, они проверяют отпечатки открытого ключа ssh
и спросите, хотите ли вы принять и сохранить их в ~/.ssh/known_hosts.
cron выполняет свои задачи от имени пользователя root, поэтому, возможно, на /root/.ssh/known_hosts не хранятся отпечатки пальцев, но он не может спросить, потому что у него нет терминала
добавить вариант -oStrictHostKeyChecking=accept-new:
#!/bin/sh
echo "start"
sshpass -p 'myPass' scp -oStrictHostKeyChecking=accept-new userB@serverB_ip:/file.txt /home/XXXXXX.txt
echo "end"
Большое спасибо ! Оно работает ! Между «-o StrictHostKeyChecking» должен быть «пробел». Полная команда: sshpass -p 'myPass' scp -o StrictHostKeyChecking=accept-new userB@serverB_ip:/file.txt /home/XXXXXX.txt
Использовать это :
0 1 * * * /usr/bin/sh /home/copyfilefromB.sh >> copyfilefromB.log 2>&1
Добавьте
2>&1в конец строки crontab, чтобы получать сообщения об ошибках.