Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

 SSH 로그인

OS : CentOS Linux release 7.8
hosts: 222.111.71.200, 222.111.71.201
user: root

목표 : 222.111.71.200 root 계정에서 222.111.71.201 root계정으로 공개키를 이용한 ssh 접속

다른 서버에 접속하기 위해 SSH 프로토콜을 사용한다. 매번 비밀번호를 입력하고 접속하는데 이러한 과정을 ssh-keygen으로 공개키를 이용해서 생략할 수 있다. 아래 실습 내용은 222.111.71.201 root계정에 비밀번호 입력 없이 로그인하는 것을 목표로 합니다. 222.111.71.200 root 계정에서 생성한 공개키를 보내 환경구성합니다.

Permission denied (publickey,gssapi-keyex,gssapi-with-mic)

Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

위와 같이 Permission denied 오류가 발생합니다. ssh 연결은 공개키를 이용한 접속과 비밀번호를 이용하는 접속으로 크게 두가지가 있는데 기본 설정에서 ssh를 비밀번호로 연결을 허용하지 않기 때문에 발생하는 오류입니다. sshd_config 파일을 수정해서 해결할 수 있습니다.

sudo vi /etc/ssh/sshd_config

...
PasswordAuthentication yes
...

systemctl restart sshd

접속하려는 서버에서 sshd_config에서 PasswordAuthentication을 yes로 변경해주고 sshd를 재시작해 줍니다.

ssh 
Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

ip로 접속할때 비밀번호를 물어보고 접속이 가능합니다.

공개키를 이용한 ssh 로그인, ssh-keygen 사용

적은 수의 서버를 관리한다면 크게 문제가 없을 수 있지만... 여러대의 서버를 관리할 때는 보안적인 측면과 효율성을 위해 공개키를 생성하여 접속하려는 서버에 복사해 비밀번호 없이 로그인하는 방법을 선택할 수 있습니다.

공개키 생생

ssh-keygen -t rsa
Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

명령을 실행하면 공개키가 저장될 파일 경로와 passphrase를 지정해줘야 합니다. -t 옵션은 타입을 지정하는 옵션입니다. 222.111.71.200 서버 root 계정에서 생성하기 때문에 해당 계정에 대한 공개키입니다.

ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa

-f 옵션은 공개키 파일을 지정할 수 있고 -N 옵션은 passphrase를 설정할 수 있다.

Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

만약 기존에 생성한 키가 있다면 덮어쓸지 되물어본다.

ssh-keygen -t rsa -N '' -f /root/.ssh/id_rsa <<< y

'<' 기호를 사용해서 해당 부분도 바로 넘어갈 수 있습니다.

공개키 Host 전송

scp /root/.ssh/id_rsa.pub :/root/id_rsa.pub
Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

접속하려는 서버에 공개키를 먼저 보냅니다.

공개키 등록

mkdir /root/.ssh
chmod 700 /root/.ssh
touch /root/.ssh/authorized_keys
chmod 644 /root/.ssh/authorized_keys

.ssh(700) 경로나 authorized_keys(644) 파일이 없다면 생성해줍니다.

cat /root/id_rsa.pub >> /root/.ssh/authorized_keys

공개키를 등록해줍니다.

ssh 
Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

비밀번호 입력없이 로그인이 가능합니다.

위의 방법대로 접속하려는 서버에 고개키를 보내고 등록하여 비밀번호 없이 접속이 가능합니다. ssh 키 인증으로 접속하는 환경 구성은 직접 접속하기 위한 이유도 있지만.... ansible이나 Foreman같이 다른 툴에서 유용하게 사용하기 위해서 사용되기도 합니다.

공개키 Remote 등록

위의 과정대로 공개키 파일을 이동시키고 직접 붙어서 등록하는 방법도 있지만... 이러한 방법을 자동으로 해주는 명령어도 있습니다.

ssh-copy-id -i ~/.ssh/id_rsa.pub 

ssh-keygen help 참조

Ssh 비밀번호 없이 - Ssh bimilbeonho eobs-i

1. 클라이언트에서 ssh-keygen 명령으로 ssh-key를 생성한다.
– ssh-keygen -t rsa 명령으로 ssh key를 생성한다. key를 생성하면, 홈 디렉토리내의 .ssh 디렉토리에 id_rsa, id_rsa.pub 두개의 파일이 생성된다.

[root@localhost root]# cd /root/.ssh/
[root@localhost .ssh]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
b5:69:64:dd:16:70:b9:6d:b7:2f:36:da:39:ba:b0:e3 root@localhost
[root@localhost .ssh]# ls
id_rsa  id_rsa.pub  known_hosts
2. 생성된 key를 서버에 복사하기

– 생성된 id_rsa.pub 파일을 서버에 복사한다. 서버에 복사할 때는 접속하려는 계정의 홈 디렉토리 내에 .ssh/authorized_keys라는 파일 명으로 복사해 넣는다. 만약 여러대의 클라이언트에서 서버에 패스워드 없이 접속을 하기 위해서는, 각각의 클라이언트에서 key를 생성하고, id_rsa.pub 파일의 내용을 서버의 authorized_keys 파일에 추가해서 붙여 넣으면 된다.

[root@localhost .ssh]# scp id_rsa.pub 10.30.100.32:/root/.ssh/authorized_keys
The authenticity of host ‘10.30.100.32 (10.30.100.32)’ can’t be established.
RSA key fingerprint is 76:fa:84:e5:f9:de:46:18:56:7c:87:5f:c0:11:21:e5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘10.30.100.32’ (RSA) to the list of known hosts.
’s password:
id_rsa.pub           100% |***************************************************************************|   224       00:00
3. 패스워드 없이 서버에 접속 테스트를 한다.

[root@localhost .ssh]# ssh 10.30.100.32
Last login: Tue Jun 24 14:40:23 2008 from 10.30.100.118
[root@localhost ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:50:FC:69:5F:F0
inet addr:10.30.100.32  Bcast:10.30.101.255  Mask:255.255.254.0
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:5668 errors:0 dropped:0 overruns:0 frame:0
TX packets:2536 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:549777 (536.8 KiB)  TX bytes:297273 (290.3 KiB)
Interrupt:16 Base address:0xcc00

lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@localhost ~]#

– 만약 접속이 불가능 하다면, 서버의 sshd_config(/etc/ssh/sshd_config) 파일에서 아래의 사항을 확인한다. 주석처리가 되어 있을 경우 주석을 제거하고 ssh데몬을 재시작 한 후에 접속 테스트를 한다.

PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys