Я пытаюсь получить сертификат SCP. между моими двумя экземплярами и некоторыми проблемами. Вот что я ввожу.
[ec2-user@ip-xxx-xx-xx-xx ~] scp -i .ssh/key.pem /root/.ssh/id_rsa.pub 10.xxx.xx.xxx:/root/.ssh/authorized_keys2
возвращается
/root/.ssh/id_rsa.pub: Permission denied
Я пробовал sudo, но EC2 говорит мне войти в систему как пользователь ec2, чтобы использовать эту команду. Что я делаю в носке?
В вашем сценарии необходимо учитывать два набора разрешений - один на локальном компьютере и один на удаленном. У пользователя ec2 нет прав доступа к папке / root на локальном компьютере. С помощью sudo
решает это. Однако вы входите на удаленный компьютер как пользователь без полномочий root, и у вас нет прав на запись в папку / root. Это причина ошибки, которую вы видите. (Вероятно, вы могли бы подтвердить это, добавив флаг -v в свою команду scp).
Есть как минимум два способа решить эту проблему:
Легкий способ:
Подключите свой файл к каталогу с удаленным разрешением, для которого у вас есть права на запись (домашний каталог (~ /) должен быть хорошим, если нет, каталог / tmp почти наверняка будет работать, но менее безопасен), а затем SSH внутрь и переместите файл.
sudo scp -i /root/path/to/keypair.pem /root/path/to/local_file ec2-user@xxx.xxx.xxx.xxx:~/path/to/remote_file ssh -i /root/path/to/keypair.pem ec2-user@xxx.xxx.xxx.xxx sudo mv ~/path/to/remote_file /root/path/to/remote_file exit
Более сложный путь
Можно передать файл через SSH и выполнить sudo на удаленном компьютере, используя это соединение SSH, однако удаленный компьютер должен разрешить это. По умолчанию в Linux от Amazon (который, похоже, вы запускаете под своим именем пользователя), вы не можете запустить sudo без tty. Чтобы изменить это, на удаленном компьютере запустите visudo
и закомментировать Defaults requiretty
(строка 56) и сохраните файл. После этого вы можете:
Передайте свой ключ через SSH (обратите внимание, вам все еще понадобится sudo для чтения локального файла):
sudo cat /root/path/to/local_file | ssh -v -i /root/path/to/keypair.pem ec2-user@xxx.xxx.xxx.xxx "sudo bash -c 'cat - > /root/path/to/remote_file'"
Или перенаправьте свой ключ через SSH (sudo применяется только к первой части команды, поэтому вам нужно либо стать пользователем root, либо поместить всю команду в сценарий и использовать sudo):
sudo -i ssh -i /root/path/to/keypair.pem ec2-user@xxx.xxx.xxx.xxx sudo sh -c '"cat > /root/path/to/remote_file"' < /root/path/to/local_file exit
(Некоторые программы, похоже, могут выполнять sudo после входа в систему через scp (например, WinSCP), однако я не знаю способа запустить команду через scp - возможно, SSH используется для передачи файла в этих сценариях)
Другой способ - разрешить вход в систему с правами root на удаленном компьютере, а затем войти в систему как root через SCP (все еще используя sudo локально). Отмените все изменения, которые вы вносите с помощью visudo, когда закончите с ними.
Эта ошибка означает, что вы не можете прочитать указанный файл.
/root/.ssh/id_rsa.pub: Permission denied
Можешь попробовать sudo scp ...
Попробуйте это как root (запустите su
сначала, если вы не вошли в систему как root):
ssh-copy-id 10.xxx.xx.xxx
Похоже, что EC2 не хочет, чтобы вы входили в систему как root. Сможете ли вы выполнить то, что пытаетесь сделать как пользователь ec2? Если так:
ssh-copy-id ec2-user@10.xxx.xx.xxx
Если нет, вы можете 1) отредактировать / etc / ssh / sshd_config на PermitRootLogin yes
и перезапустите sshd или 2) дайте пользователю ec2 разрешение делать то, что вы хотите.