Я пытаюсь скопировать некоторые файлы с локального компьютера на удаленный хост.

root@local:~$ scp /var/www/html/file.php root@remote_host:/var/www/html/test/

Результат

scp: /var /www /html /test: в доступе отказано

Пароль root @ remote_host: В доступе отказано, попробуйте еще раз.

Это права на папку на удаленной машине

drwxrwxr-х

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

2 ответа2

3

Конечно, причины могут быть разными.

Наиболее очевидный ответ заключается в том, что по той или иной причине вы не можете пройти проверку подлинности удаленной системой. Тем не менее, поскольку вы выводите права доступа к каталогу в удаленной системе, я предполагаю, что у вас есть права и возможность получить к нему доступ некоторыми способами (но, возможно, не с помощью ssh).

Итак, первое, что нужно сделать, это подключиться к компьютеру по ssh и убедиться, что вы действительно можете написать в это место (что вы, возможно, уже пробовали):

ssh root@remote_host
cd /var/www/html/test/
touch scratch

Если вы видите пустую пустую папку, значит, вы можете написать.

Предположим, что вы можете правильно получить доступ к системе, но вышеприведенное не работает, также возможно, что на самом деле нет прав на запись в каталог. Одним из примеров может быть, если каталог на удаленном компьютере находится внутри смонтированной файловой системы определенного типа, например NTFS (которая не даст вам надежных режимов UNIX-типа), и ядро устанавливает его только для чтения, потому что оно не было не установлен через предохранитель, чтобы дать права на запись. Вам нужно будет более тщательно проверить локальные настройки, но это будет очень необычная настройка, если она не является новой (или спроектированной таким образом).

Отладка системы отсюда будет трудной для меня, поэтому я просто дам вам альтернативный способ попробовать. Если вы можете получить доступ к системе через ssh и записывать файлы изнутри системы, то вы можете сделать это просто наоборот, если ваш локальный компьютер не защищен брандмауэром и т.д.

Вы можете легко найти IP-адрес компьютера, с которого вы ssh'd, даже не переходя на другой терминал. Давайте просто сделаем это переменной среды для простоты:

export IP="`echo $SSH_CLIENT | awk '{print $1}'`"

Я обычно включаю эту строку, например, в ~/.bashrc, потому что считаю ее удобной.

В любом случае, тогда

scp user@$IP:/var/www/html/file.php /var/www/html/test/

Конечно, если вы хотите запустить программу для автоматического обновления на локальном компьютере, это еще не решит вашу проблему! Есть способы решить эту проблему, вызывая команды через SSH (так что вы будете вызывать scp через ssh, что кажется нелогичным); однако, для того, чтобы он был полностью автоматизирован, вам нужно установить ключ ssh и не вводить пароль для ключа. Это не та вещь, которую я бы порекомендовал для корневого доступа к машине, и необходимо выполнить некоторую отладку с помощью ssh удаленной машины, которая блокирует scp.

1

Если вы входите в систему как root, то root имеет все разрешенные разрешения, независимо от разрешений для любого каталога (исключение может быть только в том случае, если каталог имеет системный неизменяемый флаг над chflags (1))

Вы либо указали неверный пароль, либо удаленный хост использовал только аутентификацию с открытым ключом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .