scp работает из командной строки, но не из сценария оболочки - разрешение запрещено

1

Я перевожу некоторые домашние папки из одного Linux-бокса в другой, используя scp. Я сохранил свой открытый ключ в файле author_keys целевого окна, и следующая команда отлично работает, когда я набираю его в командной строке:

scp myArch.tar root@myOtherServer:/root/dumps

... однако, когда я помещаю это в сценарий, как так ...

#!/bin/bash
tar -cf /tmp/$1.tar $1; wait
scp /tmp/$1.tar root@myOtherServer:/root/dumps

.. и вызвать его, передав имя папки в качестве параметра, я получаю следующую ошибку.

[root@myHost home]# /root/migrate myHomeFolder
Permission denied (publickey).
lost connection

Есть идеи, в чем может быть проблема?

Xoundboy
источник
Можете ли вы добавить echo $ HOME в скрипт? Интересно, если в скрипте нет переменной окружения, чтобы он знал, где находится .ssh.
Пол
Я предполагаю, что вы имели в виду экспорт $ HOME - все та же ошибка
Xoundboy
Я имел в виду «эхо», чтобы вы могли взглянуть на значение, которое, по мнению сценария, было установлено. Но форсирование проблемы работает так же хорошо. Я думаю, что это может быть время для подробного ведения журнала на сервере.
Пол
Вы также можете использовать параметр -i в команде scp, чтобы убедиться, что он отправляет правильный закрытый ключ, и -v, чтобы увидеть, есть ли с ним какие-либо проблемы
Пол

Ответы:

0

попробуйте выполнить скрипт с помощью sudo ./script.sh, возможно, потому что вы пишете в / root

Peeyush
источник
Нету. Это не работает ... нет, почему бы это все равно? sudo относится только к локальной машине - проблема здесь заключается в подключении к удаленной
Xoundboy
0

Скорее всего, это связано с тем, что shebang запускает новый экземпляр оболочки bash, в котором ssh-agent не был настроен. Чтобы убедиться, вы можете добавить следующую строку в начало вашего скрипта:

ssh-add -l >> $HOME/ssh.log 2>&1

запустите скрипт и проверьте, что вы получаете в ssh.o

ryuusenshi
источник