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

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


Можете ли вы добавить echo $ HOME в скрипт? Интересно, если в скрипте нет переменной окружения, чтобы он знал, где находится .ssh.
Пол

Я предполагаю, что вы имели в виду экспорт $ HOME - все та же ошибка
Xoundboy

Я имел в виду «эхо», чтобы вы могли взглянуть на значение, которое, по мнению сценария, было установлено. Но форсирование проблемы работает так же хорошо. Я думаю, что это может быть время для подробного ведения журнала на сервере.
Пол

Вы также можете использовать параметр -i в команде scp, чтобы убедиться, что он отправляет правильный закрытый ключ, и -v, чтобы увидеть, есть ли с ним какие-либо проблемы
Пол

Ответы:


0

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


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

0

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.