Today I Learned …

[삽질] SSH 접속 시 공개키 로그인이 안되고 자꾸 비밀번호를 묻는 경우 본문

Computer/삽질

[삽질] SSH 접속 시 공개키 로그인이 안되고 자꾸 비밀번호를 묻는 경우

염베리 2021. 10. 19. 23:28

* 초심자의 수난을 기록합니다.


SSH 접속 시 공개키 로그인이 안되고 자꾸 비밀번호를 묻는 경우

하............... 진짜 역대 삽질이다.

먼저 기본적으로 체크해봐야할 사항이다.

 

[1] 클라이언트쪽에서 공개키 생성

$ cd ~/.ssh

$ ls

⇒ id_rsa 와 id_rsa.pub 파일 둘 다 있는 지 확인

 

[2] 서버에 공개키 알려주기

$ ssh [사용자명]@[Ip주소]

$ ls -a

⇒ .ssh 디렉토리 있는 지 확인 (없으면 만들어줘야함)

$ echo [id_rsa.pub 메모장으로 열어서 전문을 복사 붙여넣기] >> ~/.ssh/authorized_keys

$ cat ~/.ssh/authorized_keys

⇒ 잘 복사됐나 확인

 

[3] SSH 재접속 시도

$ exit

⇒ 일단 접속되어있는 서버에서 나와주기

$ ssh [사용자명]@[Ip주소]

⇒ 우리가 원하는대로라면 여기서 얘가 Password를 물어보면 안된다!!! 공개키 알려줬는데 왜 자꾸 비번 물어봐????

 

특이사항이 없으면 재접속 시 비번 물어보는 과정 없이 자동으로 접속이 되어야한다.

그러나, 안되는 경우.... 구글링을 시작한다.....

구글님께 여쭤보니 sshd_config 문제라고 한다.

또 하라는대로 열심히 설정해준다.

그런데도 안되는 경우...

열심히 따라서 설정해줬던 sshd_config가 뭔가 꼬인게 아닐 지 의심이 된다 ㅋㅋㅋ.....

결론부터 말하자면 그게 문제는 아닐 것이다...

그렇지만 그 순간 만큼은 정말 sshd_config의 초기 설정이 간절했기에 모 외국 사이트에서 찾은 초기 설정을 첨부한다.

 

「 서버측 /etc/ssh/sshd_config 초기 설정 」

#   $OpenBSD: sshd_config,v 1.103 2018/04/09 20:41:22 tj Exp $

# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.

# This sshd was compiled with PATH=/usr/bin:/bin:/usr/sbin:/sbin

# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.

#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_ecdsa_key
#HostKey /etc/ssh/ssh_host_ed25519_key

# Ciphers and keying
#RekeyLimit default none

# Logging
#SyslogFacility AUTH
#LogLevel INFO

# Authentication:

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

#PubkeyAuthentication yes

# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile  .ssh/authorized_keys

#AuthorizedPrincipalsFile none

#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody

# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#HostbasedAuthentication no
# Change to yes if you don't trust ~/.ssh/known_hosts for
# HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don't read the user's ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes

# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no

# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

# Set this to 'yes' to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to 'no'.
UsePAM yes

#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
#X11Forwarding no
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

# pass locale information
AcceptEnv LANG LC_*

# no default banner path
#Banner none

# override default of no subsystems
Subsystem   sftp    /usr/libexec/sftp-server

# Example of overriding settings on a per-user basis
#Match User anoncvs
#   X11Forwarding no
#   AllowTcpForwarding no
#   PermitTTY no
#   ForceCommand cvs server

 

거의 도달

참을인 백번 새기고 또 열심히 찾아보니 권한 문제인 것 같다.

서버 측의 .ssh 디렉토리나 authorized_keys 의 권한이 취약하게 설정되어 있는 경우 보안 상 문제로 공개키 로그인이 deny 된다고 한다.

여기까진 구글링이 가능하다.

그러나 열심히 .ssh와 authorized_keys의 권한을 바꿔줘도...... 역시 안된다.

뭐지???? 이제 돼야 하는데???

 

진짜 결론

chmod로 .ssh, authorized_keys...... 를 아무리 바꿔줘도 설정이 안된다(??)

그제서야 어떤 가능성이 떠올랐다......

저번에 웹 페이지 만들면서 홈 디렉토리의 권한을 건드렸던 것이 여기까지 온 것이었다...

(/var/www/html에 파일 넣었다 뺐다를 자유롭게 하기 위해 모든 권한을 부여했었다....ㅎ 이래서 하지말라는건 안해야됨)

숙연.....

 

[1] 권한 빼주기

$ cd ~

$ chmod 700 .

⇒ 홈 디렉토리의 권한을 700으로 변경  //Owner가 아닌 Group이나 Other쪽에 쓰기 권한이 있으면 안된다.

$ chmod 700 .ssh

$ cd .ssh

$ chmod 600 authorized_keys

 

이제 재접속해보자...

 

[2] SSH 재접속 시도

$ exit

⇒ 서버에서 나와주기

$ ssh [사용자명]@[Ip주소]

 

드디어 그놈의 비번 안물어보고 깔끔하게 자동 접속되는 모습을 볼 수 있다....ㅎ

 

참고 포스팅

https://almost-native.tistory.com/398

https://www.digitalocean.com/community/questions/why-is-chmod-600-recommended-on-a-public-authorized_key

프로필사진
berry
FE Developer, loves React & better DX
Comments