Visual Studio Code 를 이용한 SSH 접속
key 파일 이용한 SSH 접속을 설명합니다. 폴더 및 파일 권한설정에 대한 지침을 참고하세요. key 파일을 복사해서 옮기는 경우 .ssh 내 파일 권한을 맞게 설정해야 합니다. 접속하는 개인 컴퓨터 (클라이언트)와 서버컴퓨터 모두 권한을 확인해보세요.
# 클라이언트
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
# 서버
chmod 600 ~/.ssh/authorized_keys
chmod 644 ~/.ssh/known_hosts
우분투 SSH 보안 설정
우분투에서 보안 설정은 /etc/ssh/sshd_config 을 수정합니다.
# 터미널에서 입력
sudo nano /etc/ssh/sshd_config
다음 중 필요한 내용을 수정합니다. 원격으로 작업시 ssh 설정 변경 작업에 접속 권한을 잃을 수 있으니 유의하세요.
# 포트 수정
Port XXXX
# 세션 타임아웃 설정
ClientAliveInterval 600
ClientAliveCountMax 3
# 루트 로그인 차단
PermitRootLogin no
# 빈 패스워드 차단
PermitEmptyPasswords no
# 키 로그인 허용
PubkeyAuthentication yes
# 패스워드 로그인 차단 (주의!: 키 로그인 확인 후 설정할 것!)
PasswordAuthentication no
# 로그인 시도 5회 실패시 접속 강제 종료
MaxAuthTries 5
# 30초 이내로 로그인 하지 않을 경우 강제 종료
LoginGraceTime 30
# 접속 ip 제한
AllowUsers HostName@199.999.99.02
설정이 끝난 후에 아레 코드를 실행해 sshd(Secure Shell Daemon)에 재시작 함으로써
config 변경사항을 반영합니다.
sudo systemctl restart sshd
우분투 파일전송
FTP 서버를 설치하지 않고 원격 컴퓨터에 SSH로 파일을 전송할 수 있습니다. 아래는 예제입니다.
- 전송파일: /Users/knoll/Desktop/test.jar
- 전송위치: root@127.0.0.1:/test
# 파일전송
scp /Users/knoll/Desktop/test.jar root@127.0.0.1:/test
# test 폴더 전송
scp -r /Users/knoll/Desktop/test root@127.0.0.1:/test
우분투의 파일 압축에 대해서 알아보겠습니다. (추가 예정)
원격접속 시 모형의 백그라운드 실행
다음 설명은 vscode를 이용하여 서버 환경에서 작업을 할 때 파이썬을 실행하는 프로세스가 멈추지 않고 백그라운드에서 돌아갈 수 있도록 하는 코드입니다. 여기서 nohup은 no hangup 줄임말로 멈추지 말라는 뜻입니다. 마지막 & 는 백그라운드 실행을 하라는 뜻입니다. 이 때 파이썬 실행과 함께 확인해야하는 print() 를 통한 메세지는 nohub.out 에 저장됩니다.
#shell
nohup python run.py &
아래 명령어로 실행되고 있는 프로세스 식별자와 부모프로세스 식별자를 확인할 수 있습니다.
#shell
ps -ef | grep run.py
ID 프로세스식별자1 부모프로세스식별자 0 19:25 pts/5 00:00:00 python mnist_gan.py
다만 이 프로세스는 실제 파이썬이 실행되는 것은 아닙니다. 현재 끊어지지 않고 실행을 요청한 프로세스는 위의 부모프로세스를 통해서 찾을 수 있습니다. 다음으로 아래 명령어를 입력합니다.
#shell
ps -ef --forest | grep 부모프로세스식별자
그러면 ID 프로세스식별자2 부모프로세스식별자 99 19:08 pts/5 00:35:31 | \_ python run.py 를 확이할 수 있습니다.
다음 코드를 통해 프로세스 식별자를 이용해서 해당 프로세스를 강제로 종료할 수 있습니다.
kill 프로세스식별자2
nohup 실행시 다음 코드를 사용하면 출력값을 로그에 저장할 수 있습니다. 여러개의 백그라운드 작업을 할 때 유용합니다.
nohup python main.py > my_output.log 2>&1 &