리눅스

ssh

정지홍 2024. 8. 3. 15:31

0. ssh-keygen?

  • ssh를 통한 서버 접속시 다양한 인증 방법으로 접속가능.
  • 제일 간단한것은 pw를 이용하는것임. 하진만 보안에 취약.
  • ssh-keygen은 ssh접속을 위한 인증 키 생성,관리,변환을 한다.
  • key생성시 public Key, Private Key가 생성되며 이는 한 쌍으로 동작
  • 두개의 키로 모두 지닌 client가 public key를 접속할 서버로 전달하고 서버는 이를 암호화 하여 client에게 전송하면 , client는 이를 private Key로 복호화하여 인증.
  1. client가 server로 ssh접속 요청
  2. server에서 client로 message전송
  3. client가 message를 private key를 이용하여 encrypt 한 뒤 server에게 전송
  4. server에서 public key를 이용해서 message를 decrypt한 뒤 message비교 후 접속 허용

1. server는 우선 openssh-server를 설치해야 함

root@9f04b88fd5c9:~/.ssh# apt install openssh-server

.......

Creating config file /etc/ssh/sshd_config with new version
Creating SSH2 RSA key; this may take some time ...
3072 SHA256:T8fDeZzwh3pewr1wKAZfr+10/VUKi8jOaiD6rPEFqm4 root@9f04b88fd5c9 (RSA)
Creating SSH2 ECDSA key; this may take some time ...
256 SHA256:Yg4bhoYAjeOMELL8rzr3qB21DW/VJMoFHCpTCo41FiI root@9f04b88fd5c9 (ECDSA)
Creating SSH2 ED25519 key; this may take some time ...
256 SHA256:+of2GRnu56b74hHC5B8Vh0PvARTv7dioVUT2V4rmxeQ root@9f04b88fd5c9 (ED25519)
invoke-rc.d: could not determine current runlevel
invoke-rc.d: policy-rc.d denied execution of start.
Created symlink /etc/systemd/system/sockets.target.wants/ssh.socket → /usr/lib/systemd/system/ssh.socket.
Created symlink /etc/systemd/system/ssh.service.requires/ssh.socket → /usr/lib/systemd/system/ssh.socket.

=====================================================================
# 서버는 openssh-server를 설치하는 과정에서 자신의 개인키 공개키를 자동 생성 함
# client가 server에 처음 연결 시도 시 해당 공개키를 client에게 제공.
# 클라이언트는 known_hosts파일에 서버의 공개키를 저장
=====================================================================

==========================아래는 openssh-server설치 시 자동으로 생성된 키===========================================
root@9f04b88fd5c9:/etc/ssh# ll | grep ssh_host
-rw------- 1 root root    513 Jul  6 02:06 ssh_host_ecdsa_key
-rw-r--r-- 1 root root    179 Jul  6 02:06 ssh_host_ecdsa_key.pub
-rw------- 1 root root    411 Jul  6 02:06 ssh_host_ed25519_key
-rw-r--r-- 1 root root     99 Jul  6 02:06 ssh_host_ed25519_key.pub
-rw------- 1 root root   2602 Jul  6 02:06 ssh_host_rsa_key
-rw-r--r-- 1 root root    571 Jul  6 02:06 ssh_host_rsa_key.pub
=====================================================================

 


2. ssh server설정

mkdir -p /run/sshd
# ssh 서버 실행 시 필요한 디렉토리 생성

/usr/sbin/sshd
# ssh서버 시작

root@9f04b88fd5c9:/etc/ssh# ps aux | grep sshd
root        4202  0.0  0.0  12020  1132 ?        Ss   02:19   0:00 sshd: /usr/sbin/sshd [listener] 0 of 10-100 startups
root        4204  0.0  0.0   3528  1672 pts/0    S+   02:19   0:00 grep --color=auto sshd

apt install net-tools

root@9f04b88fd5c9:~# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
8: eth0@if9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

root@9f04b88fd5c9:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:acff:fe11:2  prefixlen 64  scopeid 0x20<link>
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 51630  bytes 63312532 (63.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 17608  bytes 1181314 (1.1 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 3689  bytes 422236 (422.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3689  bytes 422236 (422.2 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

sudo vi /etc/ssh/sshd_config
# 다음 파일에서 PasswordAuthentication , PubkeyAuthentication 을 활성화

sudo systemctl restart sshd
# 그리고 재시작

root@jeongjihong:/etc/ssh# ssh root@localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ED25519 key fingerprint is SHA256:Rc27DtY2DktvdBLniVfTF3VLmh2W6TN0vXKcaQVEBpo.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added 'localhost' (ED25519) to the list of known hosts.
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.146.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Last login: Sat Jul  6 01:28:01 2024

# 이렇게 접속 가능

3. key생성

sudo yum install -y openssh-clients
sudo apt-get update
sudo apt-get install -y openssh-client



root@9f04b88fd5c9:/# ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
Created directory '/root/.ssh'.
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:
SHA256:rW4ye+OswGV1BnC3MBvaPaC0FrO3rwJA3vCWr7Z7HMA root@9f04b88fd5c9
The key's randomart image is:
+---[RSA 3072]----+
|      =.B .      |
|  o  . X X .     |
| o = .* = *      |
|  o E. o = .     |
|   o oo S .      |
|   ..oo  o       |
|    o+ .. .      |
|    o.*o+.       |
|   .o+oX=.       |
+----[SHA256]-----+

=====================================================
rsa key를 생성하였다.
-t rsa  -> RSA 알고리즘을 사용하여 키를 생성
-N '' -> 패스프레이즈를 빈 문자열로 설정
-f ~/.ssh/id_rsa -> 키 파일을 저장할 위치와 이름을 지정
=====================================================
패스프레이스
-> 암호화된 데이터나 시스템을 보호하기 위해 사용되는 암호와 유사한 문자열
-> 키를 사용할 때마다 패스프레이즈를 입력해야 함
=====================================================
root@9f04b88fd5c9:~/.ssh# cat id_rsa.pub
ssh-rsa publickey
=====================================================
root@9f04b88fd5c9:~/.ssh# cat id_rsa
-----BEGIN OPENSSH PRIVATE KEY-----
ngSQ5rWEfTckkAAAARcm9vdEA5ZjA0Yjg4ZmQ1YzkBAg==
-----END OPENSSH PRIVATE KEY-----
=====================================================

root@9f04b88fd5c9:~/.ssh# ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
Generating public/private rsa key pair.
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
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:
SHA256:HtcSuKI+OxvgNhF8SMux3/bwIZVvS7D2XUMtE6Fs1jY root@9f04b88fd5c9
The key's randomart image is:
+---[RSA 3072]----+
|  o           o. |
| + =     o . o o |
|  B .   = . = E .|
|   + . . = = o + |
|  o . * S * . o  |
| . o o O B + . . |
|  + o   + o .    |
| . oo.           |
|    +=           |
+----[SHA256]-----+

덮어쓰는 경우. 위에서 볼수있듯이 다시 물어봄.
덮어쓰면 기존에 인증했던 서버들에게 public key를 다시 배포해서 다시 인증해야 함

touch ~/.ssh/authorized_keys

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

chmod 600 ~/.ssh/authorized_keys

root@9f04b88fd5c9:~# ssh root@172.18.202.25
The authenticity of host '172.18.202.25 (172.18.202.25)' can't be established.
ED25519 key fingerprint is SHA256:Rc27DtY2DktvdBLniVfTF3VLmh2W6TN0vXKcaQVEBpo.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '172.18.202.25' (ED25519) to the list of known hosts.
root@172.18.202.25's password:
Permission denied, please try again.


root@a3c9b78eb2ef:~/.ssh# ssh root@172.18.202.25
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.146.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

 * Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
   just raised the bar for easy, resilient and secure K8s cluster deployment.

   https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Last login: Sat Jul  6 09:25:45 2024 from 172.18.192.1

# 접속은 ssh root@ipAddress -p portNumber 형식으로 하면 된다.

root@jeongjihong:~# vi ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6AE13fYr+oXmo2pNvz59qGiEA3gibASbt2bSQlTS0F5Mo76/6qxJ4VEXJLdqxuLiSSUd0p7HZJ4oG+BFi79zOAly8QUEQcf4LvjtuSNkMTRkTK6aka8LmwPl5sfCqMjwGxjknuKqbJtNoPknh9bzsLpUmUt8kUznQ3/F5PtL9/EUAv7sN7FBEfew2DHNRgPeAIqXlocXhLdkom3DLaAFBrpurPmBmr1IiQolmGZvTYFfP3UHMCZeYdXvY78lqlqV7EuRr+s1IoigVerrJcB7BR7Bp14TteNWavJtJnzPGu9TwTa0492QeNNUkcvjYB4kBHvLYsUkk8sS/29I4ej5OLhUYwur9DHVrHxGlPR+YkilYFDE2HcsllUQdV6+2oPwiE+kmeq3/SDRrNkHDm/+TzKgMOii9qGrHM31Rqnd5Sh7wkS19r3vzYCrAbFBI8XtiugkvNt2E2xjmJhXytpWK3nh7Ug2Zs1KNAql/vCNjA1UblnIRSbOf3ZuvJYtJHjU= root@jeongjihong
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDdhV1zg4mRmHpGIoDyIIOqmSKqWE2BkvJqWkbrY5UzXno/lWq2pfZGphiu/OId6NEwjrBGj2elBF6W2hWY5mBTRjx+GpFlzh9eZNAHJTSyR1KS8F/h9xC/Eui200lBLMdqcywvYuQ5kIJbLqUZeHWzDR4DPJJh1lNeic0zjBPj8YrFNDJcl1rhdIn+CDvgmXMq/sjZxDVZJatSwInMtsZY7wlQABHzFvAldBu5lgnqE7rZwNAjdoW12cpPOR/DoKmkgjw8IjZ9jKycOMPnVZstkBBgVeTrBTyM+T7w9nhdGw9BEqZRo5unDmLHRnk8oFxQtNiET5LoQctgRSFyFZA2BER6MNSouHwpbLN3ktJ3cpC4NjTbYz4O3zoEu1K48n1UCA/MFLWHf7FnAp69/jlzVmGfm0e6MbdHAPc4h6+ShTdwfA1ZR/22847MjXEPxTkFE5FFDjcXqrdq5yXd2COyc1NCvWzKc50Tc41WiZ6tFG6dEJb/xmu1ct3bOOTj5/U= root@a3c9b78eb2ef

# 위에처럼 서버의 authorized_keys에 나의 공개키를 추가해준다...
# 원래는.... 
root@a3c9b78eb2ef:~/.ssh# ssh-copy-id root@172.18.202.25 
#이렇게 하는건데 하려고 하면 root@172.18.202.25's password: 라면서 비밀번호를 입력해야한다.
# 서버의 루트 로그인 비밀번호 입력하면 안된다..... 왜 인지 모르겠다.....저거 공개키 복붙해도 안됨....

ls -l ~/.ssh/id_*.pub