공유기 등 내부망에 있어서 외부 접속이 어려운 환경에서 접속할 수 있게 할 수 있다.

터널링을 통해 가능하다. ssh 로 접속해 있을 수 있는 호스팅 환경이 있으면 된다.

apt install autossh

설치는 쉽다.

systemd / upstart 방식에 따라 자동 실행 설정이 조금 다르다.

# systemd 방식 (최근 배포판)

# vi /etc/systemd/system/autossh.service
[Unit]
Description=AutoSSH service for a reverse tunnel 
After=network-online.target

[Service]
ExecStart=/usr/bin/autossh -M 0 -q -N \
-i /root/.ssh/id_rsa \
-o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" your-externel-server \
-R 5991:127.0.0.1:5901 \
-R 5922:127.0.0.1:22 \
-R 5989:192.168.11.19:5900

[Install]
WantedBy=multi-user.target

위 설정처럼 하면 된다. 자신의 맞는 환경에 따라 수정해서 사용하면 된다.
내부 서비스(5901 , 22) 로 접속가능하고, 또는 동일네트워크 다른 서버로도 접속가능하다.

위 파일 생성 후 다음 명령으로 실행해준다.

systemctl enable autossh
systemctl start autossh

 

# upstart 방식 (예전 방식)

# vi /etc/init/autossh.conf 
description "autossh daemon for ssh tunnel"

start on net-device-up IFACE=eth0
stop on runlevel [01S6]

#setuid autossh

respawn
respawn limit 5 60

script
export AUTOSSH_FIRST_POLL=30
export AUTOSSH_GATETIME=0
export AUTOSSH_POLL=60
/usr/bin/autossh -M 0 -q -N \
-i /root/.ssh/id_rsa \
-o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" your-externel-server \
-R 5991:127.0.0.1:5901 \
-R 5922:127.0.0.1:22 \
-R 5989:192.168.11.19:5900
end script

설정 방식만 조금 다를 뿐 사용법은 동일하다.

 

그럼, 제 3의 위치에서 터널링으로 뚫어 놓은 내부서버에 접속해본다.
당연히 바로 접속 할 수는 없다.

다음의 ssh 명령으로  {로컬PC} => 외부 서버 => 내부망(터널링)  으로 접속한다.

ssh your-externel-server -L 5991:127.0.0.1:5991 -L 5922:127.0.0.1:5922 

위 설정은 로컬PC 의 포트로 터널링한 내부망의 서비스 포트와 연결하는 것이다.

ssh root@localhost -p 5922

내부에서 다음 처럼 접속하면 된다. (위 예시는 내부망의 22번 ssh 포트로 접속하는 명령)

조금 복잡해 보일 수 있지만, 흐름을 이해하면 크게 어렵지는 않다.

내부망에 포트포워딩으로 접근할 수 없는 경우, 보안접속이 필요한 서비스 등에 사용할 수 있다.
기본적으로 ssh 를 이용한 것이라 vpn 처럼 보안접속이 필요한 경우등에 유용할 듯 싶다.

 

[추가]

systemd 방식 설정 후 재부팅했는데, autossh 가 실행이 안되는 경우

다음과 같은 에러가 날때 (systemctl status autossh 로 확인)

ssh exited prematurely with status 255; autossh exiting

구글링 해보니, After=network-online.target 대신에

After=network.target
After=NetworkManager-wait-online.service

등등 여러개로 바꿔가며 해봐도 안된다. 네트워크가 정상 접속되는 시점이 차이가 있는 듯 하다.

 

# vi /etc/systemd/system/autossh.service 에 다음 항목을 추가해준다.

[Service]
ExecStartPre=/bin/sh -c 'until ping -c1 google.com; do sleep 1; done;'

 

위 처럼 네트워크가 동작하는지 체크 후에 실행하도록 한다. ( 완료 후 systemctl daemon-reload 로 설정을 재로딩 해준다)

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

우분투 로그인이 안된다.

.xsession-error 파일을 확인해 본다.(계정 폴더에 있다.)

/etc/X11/Xsession.d/99x11-common_start: line 5: /sbin/upstart: No such file or directory

다음과 같은 에러가 보인다.

우분투는 부팅 스크립트 방식을 바꿔왔다. 

system-v 방식 : /etc/init.d , rcX.d 형태의 관리

upstart 방식 : /etc/init/ 안에 부팅 관련 스크립트 관리  ( service OOO restart 형태 관리 )

systemd 방식 : 가장 최근 방식 ( systemctl restart OOO )

 

설치된 운영체제는 18.04 버전인데, systemd 을 쓰기에 upstart 는 쓰지 않는다.
(16.04 => 18.04 로 업그레이드해서 남아있었던듯 하다)

해결 방법은 upstart 를 제거해준다.

apt purge upstart

다시 GUI 로그인 해보면 될 것이다.

반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,

우분투 13.10 에서 init 스크립트가 자동실행되는 것을 방지하고자 한다.

기존에는 /etc/init.d 에 실행파일이 넣고, /etc/rcX.d 의 각 런레벨(X)에 해당하는 폴더에 S30mysql 이런식으로 symbolic 링크하는 방식이었다. (sys-v 방식인가?)

ln -s /etc/init.d/mysql /etc/rc2.d/S30mysql

또는

update-rc.d mysql defaults
update-rc.d -f mysql remove


그런데, 언제부터인가 ubuntu 에서 /etc/init 폴더에 mysql.conf 파일을 넣고, 해당파일에

start on runlevel [2345]
stop on starting rc RUNLEVEL=[016]

이런식으로 실행할 runlevel 을 지정해서 자동실행하도록 했다.(upstart 방식? systemd?)

우분투에서 두가지 다 혼용해서 쓰고 있다.

/etc/init/mysql.conf 를 부팅시 자동실행되지 않게 하고자 한다.

echo 'manual' > /etc/init/mysql.override

위 처럼 XXX.override 파일을 만들어주면된다. 내용은 manual 을 넣어준다.


좀 복잡할 수 있지만, 위 사항만 기억하면 된다.


반응형

WRITTEN BY
1day1
하루하루 즐거운일 하나씩, 행복한일 하나씩 만들어 가요.

,