ぴねろぐ

日常や趣味、プログラミングについて書いていきたい

AWS EC2へのscpでPermission Denied

scpを使ってローカルからAWS EC2インスタンスへpemファイルを送るときにPermission Deniedが発生した。

% scp -i ~/.ssh/ec2-key.pem ec2-key.pem ec2-1XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com:~/ec2-key-for.pem
user@ec2-1XX-XX-XX-XX.compute.amazonaws.com: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
lost connection

とりあえずsshのログを見てみようということで、サーバー側にて

% sudo cat /var/log/secure

接続に失敗した該当箇所を見てみると、以下のような記述があった。

sshd[7899]: Invalid user ユーザー名 from IPアドレス port 54937
sshd[7899]: input_userauth_request: invalid user ユーザー名[preauth]
sshd[7899]: Connection closed by IPアドレス port 54937 [preauth]
sshd[7902]: Invalid user ユーザー名 from IPアドレス port 54946
sshd[7902]: input_userauth_request: invalid user ユーザー名 [preauth]
sshd[7902]: Connection closed by IPアドレス port 54946 [preauth]

よく見てみると上記ログのユーザー名のところが、サーバー上のユーザーの名前じゃなくてローカル上のユーザーの名前になっていた。

ということでscpの送信先でサーバー上のユーザーを指定して実行。

% scp -i ec2-key.pem ec2-key.pem ユーザー名@ec2-1XX-XX-XX-XX.ap-northeast-1.compute.amazonaws.com:~/
ec2-key.pem          100% 1704    45.6KB/s   00:00

無事ファイルがローカルからサーバーへ送れた。

原因は送信先ユーザーの書き忘れ。 scpでは送信先のユーザー名が省略可能になっていて、ユーザー名を省略した場合はローカルのユーザーを同じユーザー名が使われる。

割と初歩的なミスだと思うが、案外ハマりそうなので忘備録として残しておく。