우분투 서버 설치에 성공했다면 이제 서버에 원격으로 접속하기 위한 세팅을 시작해볼 수 있다. 아직까지는 원격 접속 세팅이 안되어있기 때문에 서버에 모니터와 키보드 등 입력 출력 장치를 연결해 두어야 한다. Show SSH 서버 설치 및 포트 설정
명령어를 통해 ssh 서버를 설치해주도록 한다. 우분투를 설치하면서 같이 설치했을 수 있다. SSH의 기본 포트번호는 22번이고, 이 번호는 매우 널리 알려져있기 때문에 바꿔주지 않으면 수시로 접속시도를 받게 된다. 보안을 위해 바꿔줄 필요가 있다. 이를 위하여 다음의 파일을 수정해주도록 한다.
vi 대신 vim, nano 를 사용해주어도 무관하다. 포트에 적당히 기억할 수 있는 4~5자리 정도의 값을 입력해주면 된다.
SSH 서비스 시작 명령을 내려주면 이제 접속 준비가 완료되었다. 혹시 방화벽을 실행한적 없다면 방화벽을 실행시켜주고 방화벽 예외포트에 SSH 서버 포트를 추가해준다.
현재 내 서버는 공유기에 연결되어 인터넷에 설치되어있기 때문에 먼저 내부망에서 접속할 수 있는 방법을 알아보겠다. 내부망이라 함은, 쉽게 말하면 서버와 같은 공유기 아래에 있는 장치라는 뜻이다.
위 명령을 통해 내부망에서 할당된 IP를 확인할 수 있다. (외부망에서 접속하기 위해서는 추가적인 작업이 필요하다. 이는 아래에서 설명하려고 한다.) SSH 서버로 접속하기(Windows)윈도우에서 SSH 서버로 접속하기 위한 클라이언트 프로그램은 대표적으로 Putty가 가장 많이 쓰인다. https://www.putty.org/ 에서 다운로드 받을 수 있다. 프로그램을 다운받고 설치하면 다음의 화면을 만날 수 있다. host name에는 우분투 서버의 IP와 포트 번호를 입력하면 우분투 서버에 접속할 수 있다. 접속된 화면에서 우분투를 설치할 때 입력했던 사용자 이름과 비밀번호를 입력하여 서버에 로그인 할 수 있다. SSH 서버로 접속하기(UBUNTU)우분투 PC에서 우분투 서버로 접속하기 위해서 기본 터미널을 이용할 수 있다. SSH 클라이언트는 우분투에 기본으로 설치되어 있다.
위 명령어를 입력하고 암호를 입력하면 서버에 접속 및 로그인이 가능하다. 외부에서 SSH 서버로 접속하기외부에서 우분투 서버에 접속하기 위해서는 내부망 IP와는 다른 공인IP값이 필요하다.
위 명령을 통하여 외부에서 현재의 서버를 찾을 수 있는 공인IP주소를 찾을 수 있다. 하지만 가정용 인터넷을 이용하는 경우 대부분 유동IP를 사용하게 되는데, 따라서 이 값은 때때로 바뀌기도 한다. 언제 바뀔지 알 수 없는 값을 가지고 외부에서 접속하지는 못하므로 고정IP를 사용하거나(추가 비용 필요), DDNS 기능을 이용하게 된다. 보통은 공유기의 DDNS를 이용하는 것이 가장 쉬운 방법이고, 그 설정방법은 다음과 같다. 공유기 관리페이지에서 DDNS 메뉴를 찾아 원하는 주소(ipTIME 공유기의 경우 *.iptime.org의 형태로 정해지게 된다.)와 이름, 이메일 등을 입력하고 등록해주면 위와 같이 등록되고, 외부에서 해당 주소를 통해 이 공유기로 접속할 수 있다. 하지만 공유기에 접속한다고 해서 해당 접속이 어떤 PC를 향하는지, 어떤 서비스를 바라고 공유기에 접속되었는지 알 수 없다. 그렇기 때문에 포트포워딩을 해주어야 한다. 포트포워딩이란 외부에서 공유기로 접속 요청이 들어왔을 때, 내부에 있는 어떤 PC에, 어떤 서비스에 연결해줄 것인지를 정해주는 과정이다. 예를 들어 아까 설정했던 DDNS 주소인 *.iptime.org:2222로 접속했을 때, 공유기 아래 연결되어있는 다른 PC가 아닌 내가 정한 우분투 서버에 SSH 서버로 접속할 수 있도록 특정해주는 것이다. 이를 위해 아까 접속했던 공유기 관리 페이지에서 포트포워드 항목을 찾아 다음과 같이 설정해준다. 확인할 것은 Internal IP에 우분투 서버에 해당하는 IP, Internal port에 SSH 서버에 접속하기 위한 포트, External port에 임의의 포트 번호를 입력하고 저장해주는 것이다. 이 External port는 내부포트와 같을 수도, 다를 수도 있으나, 같게 하는 것이 기억하기 좋다. 만약 외부 포트를 다르게 해주었을 경우, DDNS 주소를 입력할 때에는 SSH 서버에 해당하는 외부망 포트를 입력해주어야 공유기가 정상적으로 SSH 서버에 연결해줄 것이다. 이로써 내부 사설망이 아닌 외부에서도 설정한 DDNS 주소와 포트번호를 입력하여 우분투 서버에 접속할 수 있게 되었다. 이후원격으로 서버에 접속할 수 있게 되었으니, 원격으로 서버를 켜기 위해 Wake On Lan(WOL) 세팅을 진행해 볼 예정이다. 내용 관련하여 부족한 점 조언 및 질문 언제든 환영합니다! 사용 환경
목적ROS가 돌아갈 메인 PC인 Jetson이 있고, 거리가 조금 떨어진 원격지에서 노트북으로 Jetson을 컨트롤하고자 한다. 작년에는 VNC를 이용해 GUI 기반의 원격 접속을 했었는데, 매 순간 큰 단위의 이미지를 전송해야 하다 보니 끊김현상이 심하고 원격 접속이 잘 끊어지는 등 원활하지 않았다. 이번엔 Text 기반의 SSH 접속을 시도해 네트워크 부하를 줄이고자 한다. 순서
1. 네트워크 연결 확인우선, 원활한 작업을 위해 라우터에 유선 연결로 Jetson에 이더넷을 연결했다.
1.1. 네트워크 상태 확인
1.2. IP 주소 확인
필자는 2. sshd 서버 설치 확인2.1. 설치 여부 확인
SSH 서버와 클라이언트 등 관련 유틸의 설치 여부를 확인한다. 'installed'가 있으면 최신 설치가 된 것이고, 'upgradable'이거나 아직 설치가 되지 않았다면 설치를 진행한다.
위와 같이 전부 설치가 된 것을 확인한다. 2.2. 서비스 실행 여부 확인sshd 서비스가 실행중인지 확인한다. 'active (running)' 아라고 표시됨을 확인한다.
sshd가 LISTEN 상태인지 확인한다. ssh는 포트 번호 22번을 사용한다. 따라서 22번에 해당하는 State가 LISTEN임을 확인한다. Port번호가 22번인 것이 2개 있는데, 하나는 IPv4, 하나는 IPv6이다.
3. 방화벽 확인sshd가 LISTEN 상태이더라도 방화벽이 막혀있다면 작동이 안 될 수도 있다. 우선, 방화벽 허용 여부를 확인한다.
방화벽 관련 유틸
위 명령어로 방화벽이 inactive/active인지 확인할 수 있다. 필자는 해당 command를 찾을 수 없다는 오류가 떴는데, ufw가 설치되지 않았기 때문이었다. 따라서 먼저 설치를 진행했다.
그 다음으로는 방화벽을 활성화시키고, 특정 포트 번호, 우리는 22번에 방화벽을 허용한다. 여기서 '22' 대신 'ssh'라고 입력해도 된다.
4. SSH 접속이제 노트북으로(다른 컴퓨터로) Jetson에 접속해보겠다. 4.1. 접속 정보 획득다른 컴퓨터로 SSH 접속을 하려면 그 컴퓨터의 user
ID와 IP 주소를 알아야 한다. 후자의 경우 1번 과정에서 메모해두었고, 전자의 경우 쉬이 알 수 있다. 터미널 창의 프롬프트 앞,
4.2. SSH 접속(1)현재 네트워크 연결 상태로는 아래와 같았다. 사용한 공유기는 Jetson과 노트북이 동일했으며, 공유기는 우선 유선 연결되어 인터넷이 가능한 상태였다.
이제 정말 노트북에서 Jetson으로 ssh
연결을 시도한다. 명령어는 일반 유저 권한으로 실행해도 된다.
그러면 서버 쪽 User의 비밀번호를 입력하라는 문구가 뜬다. 비밀번호를 입력해주면 아래와 같이 유저 이름이 노트북 유저에서 Jetson 유저로 바뀌며 SSH 연결이 성공적으로 수행된다. 4.3. SSH 접속(2)와이파이와 이더넷으로 연결법은 다르지만 같은 공유기를 쓰고 있는 상황이다. 그래서 연결이 잘 된 건 아닐까 하여 노트북의 네트워크를 바꿔보았다. (그도 그럴 것이 네트워크 마스크가 255.255.255.0이니 IP 맨 뒷자리가 각각 4, 114이므로 같은 네트워트 내에 존재했다.) 해서 이번엔 노트북을 스마트폰 핫스팟 연결로 인터넷에 연결했다.
다시 4.2의 과정을 반복해보았다.
그래도 연결이 잘 되었다! 두 컴퓨터의 네트워크가 다를 때의 연결을 해본 것이다. 4.4. SSH 접속(3)실제 가동에서는 Jetson은 배에 싣기 때문에 공유기에서 LAN선으로 직접 유선 인터넷 연결을 할 수 없다. 따라서 유선 연결 없이 Jetson과 공유기만 연결되어 있어도 SSH 연결이 가능한지 테스트해보려 한다. 사실 이 과정은 된다는 걸 알고는 있다. 그래도 혹시 모르니 직접 실습해보았다.
다시 4.2의 과정을 반복해보았다.
이번에도 성공적으로 연결이 되었다! 정말정말 끝! 5. roslaunch 시도이젠 직접 작동을 해볼 시간이다. LiDAR를 테스트하는 패키지를 실행시켜 볼 것이다. Jetson에 LiDAR를 연결하고, 미리 준비해둔 패키지를 실행시켰다. 당연히 실행은 노트북에서 SSH 접속된 터미널을 통해 했다.
연결된 LiDAR와 Jetson에서의 패키지가 잘 작동했다. 이번엔 창을 하나 더 띄워서 rqt_graph도 그려보았다. 이는 Text 기반의 XTerminal 에서도 창을 띄울 수 있는지 여부를 보려는 시도였다. 다시 터미널을 하나 연다. 이 때는 노트북 유저로 열리기 때문에 ssh 접속을 한 번 더 해줬다. 그리고
rqt 그래프 창이 열렸다! 사실 토픽 하나가 연결이 안 되어 있었지만, 이것은 SSH 테스트를 위함이라 크게 신경쓰지 않았다. 패키지 내부 문제겠거니... 추후 시험 방향
Jetson에서 직접 작동시킬 때는 로컬에서 작동하므로 당연히 터미널을 여러 개 띄워서 작업이 가능했다. 그러나 노트북에서 SSH로 접속하면 터미널 하나에만 접속이 되므로 한 작업이 실행되고 있을 때 다른 작업(rqt_graph, rviz 등)을 하려고 하면 새 접속을 시도해야 했다. 접속이 많아질수록 서버 쪽은 부담이 커지므로 처리가 느려진다. 아직 방법을 모르는 것일 수도 있겠지만 지금의 지식으로서는 여러 프로세스를 제어하고 싶다면 여러 접속을 하는 수밖에 없는 것 같다.
긴 시간 Windows를 써왔기에 GUI가 익숙한 필자로서는 아무리 편리하다고 해도 CLI 환경이 답답하긴 했다. 하지만 GUI 연결은 속도가 너무 느리고 불안정하다. 물론 SSH도 속도가 즉각즉각 반응할 정도의 속도는 아니다. GUI보다는 훨씬 빠르단 소리다. 일장일단이 있어 고심을 해봐야겠다. 참고 자료
|