작성 배경
github actions에서 appleboy/ssh-action 쓸 때 계속 아래의 에러가 나타나서 온갖 설정을 바꾸었는데도 해결이 안되었다. 그런데 키가 아닌 비밀번호로 연결을 시도해보니 잘 되었다. 혹시나 key값을 잘못 전달하고 있는지 확인해봤더니, 여태 mobaxterm 통해서 서버에 연결할 때 "Server refused our key" 문구가 뜬 후 비밀번호를 입력해서 연결하고 있었다. 비밀번호 없이 ssh key만을 이용해서 연결가능하다면 깃헙으로도 될 것이라고 생각했고, 실제로도 그랬다. 비슷한 문제를 겪는 사람에게 도움이 되고자 작성했다.
ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
NCP 서버에 SSH Key 이용해서 접속하기
1.로컬 컴퓨터에서 ssh key를 만든다.
(참고: 네이버 클라우드의 서버 인스턴스에서 발급받는 "서버인증키"인 pem키는 관리자 비밀번호 관리용이다.)
ssh-keygen -t ed25519 -a 200 -C "your_email@example.com"
또는
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
2.서버에 아까 만든 key 중 공개키의 값을 /유저이름(root)/.ssh/authorized_keys (해결이 안된다면 authorized_keys2 시도) 에 넣는다.
3. 서버의 파일과 폴더의 권한을 체크한다.
1) chmod
chmod 600 .ssh
chmod 640 .ssh/authorized_keys
chmod 755 (리눅스 홈 디렉토리)
chmod 700 (리눅스 사용자 홈 디렉토리. ex. root)
2) 키 기반 인증 허용 설정
서버의 /etc/ssh/sshd_config 파일을 수정한다. 아래의 값들이 활성화되어 있으면 된다.
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
필요시) PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
# Expect .ssh/authorized_keys2 to be disregarded by default in future.
AuthorizedKeysFile .ssh/authorized_keys .ssh/authorized_keys2
PubkeyAcceptedKeyTypes +ssh-rsa
4. Mobaxterm 에서 왼쪽 메뉴 중 User sessions에서 원하는 세션을 누르고 마우스 오른쪽키를 눌러 edit session을 선택한다.
5. 아래와 같이 SSH 설정을 입력하고 저장한뒤 다시 로그인해본다. 세션을 선택했을 때 비밀번호 요구없이 바로 연결되면 성공이다.
-host: 탄력적 주소
-specify username 체크하고 이름 쓰기. username은 서버에 접속한뒤 사용자 목록 확인 명령어(cut -f1 -d: /etc/passwd)으로 확인할 수 있다. ec2에서는 유저이름을 ubuntu로 쓰기도 한다는데 여기선 아니었다.
-Use private key 설정 체크하고, 사용할 key 파일 경로를 선택한다. 이때의 파일은 아까 로컬에서 만든 키의 개인키(예시 id_ed25519)의 값을 담고 있다. "-----BEGIN" 으로 시작하는 파일이다. pem 파일로 만들어서 사용했다.
Reference
1) appleboy/ssh-action : Ubuntu 20.04 이상에서 OpenSSH 설정 필요
서버의 /etc/ssh/sshd_config 파일에 `CASignatureAlgorithms +ssh-rsa` 설정을 추가한다.
https://github.com/appleboy/ssh-action#setting-up-a-ssh-key
2) appleboy/ssh-action 에러 처리 방법들 ssh: handshake failed: ssh: unable to authenticate, attempted methods [none publickey], no supported methods remain
https://github.com/appleboy/ssh-action/issues/80
3) Naver Cloud : SSH 키 기반 접속 설정 가이드 (키 기반 인증 허용 설정)
4) SSH Key login 관련 chmod 설정
https://repost.aws/knowledge-center/ec2-server-refused-our-key