ssh -p [PORT] [USER]@[HOSTNAME]
exit
ssh -p 8001 psw@230.238.22.132 # SSH 연결
exit # 연결 종료
# -p : Port 번호
# -p를 명시하지 않는다면 Default Port 22가 적용
# -X : X11 Forwarding 허용
# -C : 압축 활성화 (Data 전송 시간 단축)
Windows
C:\사용자\[User]\.ssh\config
Linux & MacOS
/Users/[User]/.ssh/config
Host [Name]
User [HostName]
User [User]
Port [Port 번호]
Host MyFirstServer
HostName 230.238.22.132
User psw
Port 8001
Host MySecondServer
HostName 201.223.14.247
User psw
Port 8001
ssh [Name]
ssh MyFirstServer
(Visual Studio Code에서) 매번 SSH를 접속 할 때, 비밀번호 입력하는 것을 생략하기 위해 SSH로 접속하려는 Server에 공개키를 등록할 수 있습니다.
# Local의 Terminal 이용
ssh-keygen -t rsa
ssh-keygen -t ed25519 # 보안과 성능 면에서 RSA 기반 Key보다 더 좋음. (사용 방식은 RSA 기반 Key와 동일)
다음 명령어를 통해 현재 Local에서 SSH Key를 발급 받을 수 있습니다.
보통 Default로 그대로 두기 위해 공백 상태에서 Enter를 쳐서 모든 단계를 넘깁니다.
그러면 위의 SSH Config File이 있는 위치에 Key가 발급됩니다.
발급된 공개키인 id_rsa.pub의 내용을 복사하여 Server에 등록해줍니다.
mkdir ~/.ssh
autorized_keys File을 생성해줍니다. (이미 있다면 생략 가능)touch ~/.ssh/authorized_keys
vim이나 nano 혹은 VSCode의 Text Editor 이용 가능.메모장으로 선택)구형 SCP(Secure Copy)보다 더 유연하고 개선된 File 전송 방식
cd /path/to/Dir1 # Local의 위치 이동
sftp -P 8001 psw@230.238.22.132 # sftp로 Remote에 연결 된 경우 Terminal의 상태가 "sftp>"로 변경
sftp MySecondServer # SSH Config를 이용한 SFTP 연결
sftp> exit # sftp 연결 종료
# -P : Port 번호
# File을 주고 받을 장소가 Remote와 Remote인 경우
ssh MyFirstServer # Remote에 SSH 연결
cd ~/psw/Dir1 # Remote의 위치 이동 후
sftp MySecondServer # 2번째 Remote와 sftp 연결
# 대부분의 POSIX 계열 Command를 그대로 사용 가능
sftp> ls # Dir1, Dir2
sftp> cd Dir2
sftp> ls # ETC
sftp> cd ETC # Remote의 위치 이동
sftp> pwd # Remote working directory: /home/psw/Dir2/ETC
Local의 home/psw/Dir1 위치와 Remote의 /home/psw/Dir2/ETC 위치에서 서로 File을 주고 받을 수 있는 상태
sftp> put practice.py # Local의 home/psw/Dir1에 위치한 practice.py를 MySecondServer의 /home/psw/Dir2/ETC 위치로 전송
sftp> put practice.py /home/psw/Dir6/ # Local의 home/psw/Dir1에 위치한 practice.py를 MySecondServer의 /home/psw/Dir6 위치로 전송 (전송 장소 직접 명시 가능)
sftp> put practice.py hello.py # Local의 home/psw/Dir1에 위치한 practice.py를 MySecondServer의 /home/psw/Dir2/ETC 위치로 hello.py라는 이름으로 전송
sftp> put -r LocalSampleDir # Local의 home/psw/Dir1에 위치한 LocalSampleDir Directory를 MySecondServer의 /home/psw/Dir2/ETC 위치로 전송
# mput을 통해 2개 이상의 File 전송 가능 (Directory는 불가능)
sftp> mput practice.py hello.py # practice.py, hello.py 두 File을 모두 Local to MySecondServer로 전송
sftp> get sample.py # MySecondServer의 /home/psw/Dir2/ETC에 위치한 sample.py를 Local의 home/psw/Dir1 위치로 전송
sftp> get sample.py /home/psw/Dir5/ # MySecondServer의 /home/psw/Dir2/ETC에 위치한 sample.py를 Local의 home/psw/Dir5 위치로 전송 (전송 장소 직접 명시 가능)
sftp> get sample.py bye.py # MySecondServer의 /home/psw/Dir2/ETC에 위치한 sample.py를 Local의 home/psw/Dir1 위치로 bye.py라는 이름으로 전송
sftp> get -r RemoteSampleDir # MySecondServer의 /home/psw/Dir2/ETC에 위치한 RemoteSampleDir를 Local의 home/psw/Dir1 위치로 전송
# mget을 통해 2개 이상의 File 전송 가능 (Directory는 불가능)
sftp> mget sample.py bye.py # sample.py, hello.py 두 File을 모두 MySecondServer to Local로 전송
SFTP보다 효율적이고 강력한 동기화 방식, 특히 대용량 데이터 및 반복 작업에 최적화
rsync는 sftp와 달리 한 번의 명령어로 동기화 작업을 수행
rsync [OPTIONS] SOURCE DESTINATION
# -a : Archive 모드. 권한, 시간, 소유권 등 모든 속성을 보존하며 하위 디렉토리까지 재귀적으로 동기화
# -v : 동기화 진행 과정을 자세하게 출력
# -z : 데이터를 압축하여 전송. 텍스트 파일 등에서 전송 속도를 높일 수 있음.
# -h : 파일 크기 등을 K, M, G와 같이 사람이 읽기 편한 단위로 표시
# --progress : 파일별 전송 진행률(%)과 속도, 남은 시간을 실시간으로 표시
# --stats: 완료 후 전체 통계 표시
# -e : Port 번호 지정 (-e 'ssh -p [Port 번호]')
# --exclude : 동기화할 필요가 없는 대상을 제외 (--exclude '.git' --exclude 'venv/' --exclude '*.py')
# --delete : SOURCE에는 없는데 DESTINATION에만 있는 파일을 삭제하여 두 디렉토리를 완전히 동기화 (주의해서 사용)
# --dry-run : 실제로 동기화하지 않고, 어떤 파일이 어떻게 변경될지 시뮬레이션 결과만 표시 (안전장치)
rsync -avzh --progress -e 'ssh -p 8000' /path/to/local_project/ username@230.238.22.132:/path/to/remote_workspace/
# SSH Config에 등록된 별명(MyFirstServer) 사용 가능
rsync -avzh --progress /path/to/local_project/ MyFirstServer:/path/to/remote_workspace/
# SOURCE와 DESTINATION의 위치만 변경
rsync -avzh --progress username@230.238.22.132:/path/to/remote_results/ /path/to/local_backup/
# SSH Config 활용
rsync -avzh --progress MyFirstServer:/path/to/remote_results/ /path/to/local_backup/
source_dir 안의 내용물(contents)을 목적지로 복사
# /path/to/source_dir/ 안의 파일과 디렉토리들이 /path/to/dest_dir/ 안으로 복사됨
rsync -av /path/to/source_dir/ /path/to/dest_dir/
source_dir 디렉토리 자체(itself)를 목적지 안으로 복사
# /path/to/dest_dir/ 안에 source_dir 라는 디렉토리가 생성되고 그 안에 내용물이 복사됨
rsync -av /path/to/source_dir /path/to/dest_dir/