scp (безопасное копирование) в экземпляр ec2 без пароля


404

У меня запущен экземпляр EC2 (FreeBSD 9 AMI ami-8cce3fe5), и я могу подключиться к нему по ssh, используя файл ключей, созданный amazon, без запроса пароля, без проблем.

Однако, когда я хочу скопировать файл в экземпляр с помощью scp, меня просят ввести пароль:

scp somefile.txt -i mykey.pem root@my.ec2.id.amazonaws.com:/

Password:

Есть идеи, почему это происходит / как это можно предотвратить?


Вы используете один и тот же идентификатор для пользователя и хоста?
Линч

Я не уверен, что понимаю, что вы подразумеваете под идентификатором, не могли бы вы объяснить?
Хофф

Если для одного соединения вы используете IP-адрес, а для другого - имя, оно не будет работать. Я только что видел, что вы используете -iопцию, чтобы предоставить свою личность. Может быть, вы также должны показать команду, которую вы используете для входа в систему с помощью SSH.
Линч

спасибо линч, разобрался!
Хофф

Ответы:


804

Я понял. У меня были аргументы в неправильном порядке. Это работает:

scp -i mykey.pem somefile.txt root@my.ec2.id.amazonaws.com:/

14
От того, кто понимает, как подключиться к ec2 через ssh, просто измените sshкоманду на scpи добавьте файл имени после файла pem.
Клаудио Сантос,

11
Поскольку этот ответ немного устарел, более свежий пример из моего нового экземпляра EC2: scp -i kp1.pem ./file.txt ec2-user@1.2.3.4: / home / ec2-user
silicrockstar

1
@siliconrockstar Ваше утверждение ec2-user@1.2.3.4:/home/ec2-userлегко заменяется более коротким и легким ec2-user@1.2.3.4:./ ./FTW!
Брок

2
Очень поздний комментарий, но то, что предлагает @ClaudioSantos, не работает точно, если вы используете нестандартный порт. Это -p для ssh и -P для scp.
Inukshuk

1
Я могу использовать мой * .PEM файл для ssh в ec2. однако, когда я хочу использовать его для SCP файла, он выдает ошибку «Отказано в доступе»! Как я могу решить это?
AleX_

58
scp -i /path/to/your/.pemkey -r /copy/from/path user@server:/copy/to/path

Параметр (-r) не обязателен, но его необходимо удалить (/) в конце удаленного пути. Ваш пример сработал для меня, большое спасибо
Аббас

35

Я использовал приведенную ниже команду для копирования из локального Linux Centos 7 в AWS EC2.

scp -i user_key.pem file.txt ec2-user@my.ec2.id.amazonaws.com:/home/ec2-user


19
scp -i ~/.ssh/key.pem ec2-user@ip:/home/ec2-user/file-to-copy.txt .

Имя файла не должно быть между файлом pem и строкой ec2-user - это не работает. Это также позволяет зарезервировать имя скопированного файла.


14

скопировать файл с локального сервера на удаленный сервер

sudo scp -i my-pem-file.pem ./source/test.txt ec2-user@1.2.3.4:~/destination/

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

sudo scp -i my-pem-file.pem ec2-user@1.2.3.4:~/source/of/remote/test.txt ./where/to/put

Итак, в основном синтаксис:

scp -i my-pem-file.pem username@source:/location/to/file username@destination:/where/to/put

-iдля индивидуального_файла


8

давайте предположим, что ваш pem-файл и файл somefile.txt, который вы хотите отправить, находятся в папке Downloads

scp -i ~/Downloads/mykey.pem ~/Downloads/somefile.txt root@my.ec2.id.amazonaws.com:~/

дайте мне знать, если это не сработает


scp -i /Users/Username/Downloads/myfile.pem -r ubuntu@my.ect.id.amazonaws.com: ~ / ~ / Desktop / на случай, если вы хотите перенести файл с сервера на локальный компьютер
Yatender Singh

2
Спасибо, я получил «отказано в доступе» :/в конце, но с :~/этим работает
кардамон

да, потому что: / - корневая папка, а: ~ / - папка пользователя, поэтому, если вы являетесь пользователем root, то: / или: ~ / что-нибудь сработает, а если вы не пользователь root, то только: ~ / вам придется использовать.
Ятендер Сингх,

3

scp -i /home/barkat/Downloads/LamppServer.pem lampp_x64_12.04.tar.gz

это будет очень полезно для всех вас, ребята


2

Мой hadoopec2cluster.pemфайл был единственным в каталоге на моем локальном Mac, и я не смог найти его с помощью aws scp -i hadoopec2cluster.pem hadoopec2cluster.pem ubuntu@serverip:~.

Скопировал hadoopec2cluster.pem в hadoopec2cluster_2.pem и затем scp -i hadoopec2cluster.pem hadoopec2cluster_2.pem ubuntu@serverip:~. Вуаля!


2

Я был одержим этим, потому что я указывал свой файл открытого ключа в

scp -i [private key file path]

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


2

В вашем случае у пользователя rootне будет никаких проблем. Но в некоторых случаях, когда вам необходимо войти в систему под SSH от имени другого пользователя, убедитесь, что каталог, который вы используете, scpимеет соответствующие разрешения для пользователя, которого вы используете в SSH.


1

Чтобы использовать PSCP, вам нужен закрытый ключ, который вы сгенерировали при конвертации вашего личного ключа с помощью PuTTYgen. Вам также нужен публичный DNS-адрес вашего экземпляра Linux

pscp -i C:\path\my-key-pair.ppk C:\path\Sample_file.txt ec2-user@public_dns:/home/ec2-user/Sample_file.txt

0

написать этот код

scp -r -o "ForwardAgent=yes" /Users/pengge/11.vim root@192.168.2.228:/root/

Если у вас есть ключ SSH с доступом к целевому серверу, а у исходного сервера нет, добавление -o «ForwardAgent = yes» позволит вам перенаправить ваш агент SSH на исходный сервер, чтобы он мог использовать ваш ключ SSH для подключения к сервер назначения.


-6

Только что протестировано:

Запустите следующую команду:

sudo shred -u /etc/ssh/*_key /etc/ssh/*_key.pub

Затем:

  1. создать ами (образ ec2).
  2. запустить из нового ami (изображение) с шага № 2 выбрал новые ключи.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.