다른 리눅스에 접속하고 파일을 주고받는 명령이다. 주소와 계정은 접속할 서버의 것을 쓴다.

ssh

Bash
ssh user@example.com
ssh -p 2222 user@example.com

`-p`는 포트다. 22번이 아니면 적는다. 처음 접속하면 서버의 호스트 키를 확인하고 `known_hosts`에 저장한다. 다음에 그 키가 바뀌었다고 나오면, 서버를 다시 설치한 것인지 먼저 확인한다. 확인하기 전에 그 줄을 지우지 않는다.

Bash
ssh-keygen -t ed25519
ssh-copy-id user@example.com

ssh-keygen은 키 쌍을 만든다. 비밀키는 `~/.ssh/`에 남기고 다른 곳으로 복사하지 않는다. ssh-copy-id는 공개키를 서버의 `authorized_keys`에 넣는다. 이후에는 비밀번호 대신 그 키로 들어간다. 키에 암호문을 달아 두었으면 접속할 때 그 암호문을 묻는다.

scp

Bash
scp notes.txt user@example.com:/tmp/
scp user@example.com:/tmp/notes.txt .
scp -r project user@example.com:/tmp/
scp -P 2222 notes.txt user@example.com:/tmp/

앞이 원본, 뒤가 대상이다. 원격은 `계정@호스트:경로`로 적는다. 경로는 그 계정의 홈을 기준으로 한 상대 경로일 수도 있고, `/`로 시작하면 절대 경로다.

scp의 포트 옵션은 대문자 `-P`다. ssh의 `-p`와 다르다.

rsync

rsync는 이미 같은 파일이 있으면 달라진 부분만 보낸다. 디렉터리를 반복해서 맞출 때 scp보다 맞다.

Bash
rsync -a project/ user@example.com:/data/project/
rsync -an project/ user@example.com:/data/project/

원본 경로 끝의 `/`는 그 디렉터리의 내용물을 대상 안에 넣는다. `/`가 없으면 `project`라는 디렉터리 자체가 대상 안에 생긴다.

`-a`는 권한, 시각, 심볼릭 링크를 유지하고 하위까지 복사한다. `-n`은 시험 실행이다. 파일을 쓰기 전에 무엇을 보낼지 본다. `-v`는 이름을 출력한다.

`--delete`는 원본에 없는 파일을 대상에서 지운다. 대상을 잘못 적으면 그 디렉터리의 파일이 지워진다. `-n`으로 목록을 확인한 뒤에만 붙인다.

진행 중인 복사가 끊겨도, 다시 같은 명령을 실행하면 이미 맞은 파일은 건너뛴다.