
시스템에 원격으로 접속하여 안전한 작업이 가능하다.
기존의 telnet, rsh 등은 데이터가 평문으로 전송되어 보안에 취약하기 때문에 암호화 과정을 거치는 SSH를 사용한다.
ssh 는 데이터 암호화 시 비대칭키 암호화와 대칭키 암호화 알고리즘을 사용
ssh 접속 시 출력되는 메시지에 yes 를 입력하면 서버의 공개키를 클라이언트에 저장하게 된다.
[ssh-user@server2 ~]$ ssh vagrant@192.168.10.10
The authenticity of host '192.168.10.10 (192.168.10.10)' can't be established.
ED25519 key fingerprint is SHA256:2QpFpEo/HRBeI/RlLPm9EbwtBBITXrcv1jhHUqIu1Nk.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes

user-name에 접속하고자 하는 사용자 이름, address에 접속하려 하는 시스템의 DNS 또는 IP주소를 입력한다.
ssh <username>@address
-X 옵션 : 두 시스템 모두 GUI기반 환경일 때 그래픽 도구 사용
# 원격 명령
ssh <username>@address <command>
/etc/ssh 디렉토리에 존재한다.
| 파일 이름 | 설명 |
|---|---|
| moduli | Diffie-Hellen 알고리즘에 사용되는 파라미터 |
| ssh_config | OpenSSH 클라이언트 설정에 필요한 파일 |
| sshd_config | OpenSSH 서버 설정에 필요한 파일 |
| ssh_hostkey | host와 key 사이가 대신 암호화 알고리즘 이름으로 대체, 해당 알고리즘 개인키 |
| ssh_hostkey.pub | host와 key 사이가 암호화 알고리즘 이름으로 대체, 해당 알고리즘의 공개키 |
# 실행 시 .ssh에 인증을 위한 개인키, 공개키 한 쌍이 생성
ssh-keygen <option> <argument>
# 키가 저장되는 위치 설정(enter 입력 시 기본값)
Enter file in which to save the key (/root/.ssh/id_rsa):
# 보조 패스워드 생성 여부(enter 입력 시 키 파일만으로 인증)
Enter passphrase (empty for no passphrase):
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:
# .ssh 디렉토리에 id_rsa, id_rsa.pub 파일 생성
[root@server1 ~]# ls .ssh
id_rsa id_rsa.pub known_hosts known_hosts.old
# 상대 시스템에 key copy
ssh-copy-id <username>@<address>
# ssh-user 사용자에게 복사 후 확인
[ssh-user@server2 ~]$ ls .ssh/
authorized_keys known_hosts known_hosts.old
# 별도의 인증 과정 없이 키 기반 인증으로 바로 접속
[root@server1 ~]# ssh ssh-user@192.168.10.20
Last login: Fri May 31 02:19:58 2024
사용자 간 1:1로 설정이 되어있기 때문에 sshd_config에서 접근을 차단하도록 설정하면 키 기반으로 인증된 사용자만 접근 가능하다.
# ssh 접속이 불가능하도록 64번째 줄 수정
sudo vi /etc/ssh/sshd_config
PasswordAuthentication no
# 인증되지 않은 사용자인 vagrant user는 접속이 불가능 하다.
[vagrant@server1 ~]$ ssh ssh-user@192.168.10.20
The authenticity of host '192.168.10.20 (192.168.10.20)' can't be established.
ED25519 key fingerprint is SHA256:5Oj+neREW0+5dP9Vjr1hJ9T0PDNZBszUqiE7ZS4ePM8.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.10.20' (ED25519) to the list of known hosts.
ssh-user@192.168.10.20: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
scp <source> destination
-r 옵션 : 디렉토리 복제
# ssh-server로 fileA라는 파일을 원격 복제
[root@server1 ~]# scp fileA ssh-server@192.168.10.20:/home/ssh-server/
ssh-server@192.168.10.20's password:
fileA 100% 9 17.8KB/s 00:00
# ssh-server의 fileB라는 파일을 사용자의 현재 위치로 복제
[root@server1 ~]# scp ssh-server@192.168.10.20:/home/ssh-server/fileB .
ssh-server@192.168.10.20's password:
[root@server1 ~]# ls
fileA fileB
ftp와 유사한 파일 전송 방식으로 ssh의 암호화 방식을 함께 사용해 좀 더 안전히 파일을 주고받을 수 있다.
sftp <username>@<address>
[root@server1 ~]# sftp ssh-server@192.168.10.20
ssh-server@192.168.10.20's password:
Connected to 192.168.10.20.
sftp> ls
fileA fileB
sftp> pwd
Remote working directory: /home/ssh-server
| sftp프롬프트 명령 | 설명 |
|---|---|
| ls PATH | 디렉토리 내용 확인 |
| cd PATH | 디렉토리 이동 |
| mkdir PATH | 디렉토리 생성 |
| rmdir PATH | 디렉토리 제거 |
| put LOCAL [REMOTE] | 클라이언트의 파일을 원격으로 전송 |
| get REMOTE [LOCAL] | 원격의 파일을 클라이언트로 전송 |
가상머신 2대를 한 파일로 생성
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.define "server1" do |config|
config.vm.box = "generic/rocky9"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = "1"
vb.customize ["modifyvm", :id, "--nic2", "natnetwork", "--nat-network2", "NatNetwork"]
(0..2).each do |hd|
if !File.exist?("disk#{hd}.vdi")
vb.customize ["createmedium", "disk", "--filename", "disk#{hd}.vdi", "--size", 20480]
end
vb.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", hd+1, "--device", 0, "--type", "hdd", "--medium", "disk#{hd}.vdi"]
end
end
end
config.vm.define "server2" do |config|
config.vm.box = "generic/rocky9"
config.vm.provider "virtualbox" do |vb|
vb.memory = "2048"
vb.cpus = "1"
vb.customize ["modifyvm", :id, "--nic2", "natnetwork", "--nat-network2", "NatNetwork"]
end
end
end
같은 네트워크 대역을 가진 가상머신 server1과 server2의 ssh 접속 환경 구축
공통 환경
gateway : 102.168.10.1
dns : 8.8.8.8

vagrant ssh
<정의된 가상머신 이름>
# 위 환경에 맞춰 nmcli 명령으로 설정
# server2 ipv4.addr : 192.168.10.20
nmcli connection add con-name static type ethernet ifname eth1 ipv4.addresses 102.16
8.10.10/24 ipv4.gateway 192.168.10.1 ipv4.dns 8.8.8.8 ipv4.method manual
nmcli connection up static
# ssh 접속이 가능하도록 64번째 줄 수정
sudo vi /etc/ssh/sshd_config
수정 PasswordAuthentication yes
# restart 하여 수정내용 적용
systemctl restart sshd
ssh 명령 사용하여 다른 가상머신으로 접속

# 키 생성
ssh-keygen
# 접속할 상대방에 키 복사
ssh-copy-id <username>@<address>
그림과 같이 server1, server2 가상머신이 양방향으로 통신할 수 있게 구축되었고, 키 기반 인증 활용 시 sshd_config에서 ssh 접근을 차단하더라도 키를 가지고 있으면 단방향으로 통신할 수 있게 되었다.
