Today I Learned …
[삽질] SSH 접속 시 공개키 로그인이 안되고 자꾸 비밀번호를 묻는 경우 본문
* 초심자의 수난을 기록합니다.
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주소]
드디어 그놈의 비번 안물어보고 깔끔하게 자동 접속되는 모습을 볼 수 있다....ㅎ
참고 포스팅
'Computer > 삽질' 카테고리의 다른 글
[삽질] SCP를 통한 파일 전송 시 : Permission Denied, 디렉토리나 파일 없음 문제 시 제일 먼저 확인해볼 것 (3) | 2021.10.20 |
---|---|
[삽질] 웹개발, 권한 변경, MySql 관련 (0) | 2021.10.11 |