Назад | Перейти на главную страницу

Как установить пары ключей SCP от одного экземпляра Amazon EC2 к другому?

Я пытаюсь получить сертификат 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).

Есть как минимум два способа решить эту проблему:

  1. Легкий способ:

    Подключите свой файл к каталогу с удаленным разрешением, для которого у вас есть права на запись (домашний каталог (~ /) должен быть хорошим, если нет, каталог / 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
  2. Более сложный путь

    Можно передать файл через 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 разрешение делать то, что вы хотите.