제한된 Linux 시스템에 대한 원격 액세스를 위한 역방향 SSH 터널 생성

6245 단어 ssh
나는 이런 설정에 대한 명확한 현대적 묘사를 찾지 못해서 다른 사람들을 돕기 위해 이 글을 썼다.
만약 당신이 ssh 방문하고 싶은 리눅스 기계가 있다면, 이 기계는 회사나 다른 방화벽 뒤에 있어서 제어할 수 없기 때문에 ssh 등 외부 포트를 전송할 수 없습니다. 제한을 받는 기계라고 부릅니다. 예를 들어 이 기계에서 로컬 변경을 할 수 있다고 가정합니다.이 글은 제한된 기기에서 시작하여 사용자가 제어하는 인터넷의 다른 위치의 리눅스 서버의 포트까지 역방향 ssh 터널을 설정하는 방법을 설명합니다.역방향 터널이 있으면 ssh를 통해 서버에 연결된 이 포트만 있으면 제한된 방화벽을 통해 터널의 ssh 세션을 제한된 기계로 되돌릴 수 있습니다.물론 제한된 네트워크를 제어하는 사람과 이 조작을 할 권리가 있는지 항상 확인해야 한다.
autossh은 이전에 이 목적에 자주 사용되었다(거의 모든 기존의 반방향 ssh터널에 관한 온라인 강좌는 autossh). 그러나 autossh는 현재 불필요하다. 왜냐하면 현대openssh버전은 체인의 운행 상황을 감시하고 체인이 고장났을 때 종료할 수 있기 때문이다systemd. 그리고 ssh터널을 다시 시작하는 데 사용할 수 있기 때문이다.따라서 autossh는 필수적이지 않습니다. 우리는 표준sshsystemd를 단독으로 사용하여 자동 유지보수를 실현하는 ssh터널을 사용할 수 있습니다.
한 마디로 하면 다음과 같습니다.
  • 제한기계를 설치한다.
  • 서버를 설정합니다.
  • 최종 설정 및 테스트.

  • 제한된 시스템 설정
    제한된 컴퓨터에서 /etc/sshtunnel/ 에 ssh 키 쌍을 만듭니다. 이 쌍에는 빈/암호가 없는 단어가 포함되어 있습니다.
    $ sudo mkdir -p /etc/sshtunnel
    $ sudo ssh-keygen -qN "" -f /etc/sshtunnel/id_rsa
    
    systemd에서 다음/etc/systemd/system/sshtunnel.service 서비스 파일을 작성/붙여넣고 특정 서버 및 포트의 필요에 따라 편집합니다.
    [Unit]
    Description=Service to maintain an ssh reverse tunnel
    Wants=network-online.target
    After=network-online.target
    StartLimitIntervalSec=0
    
    [Service]
    Type=simple
    ExecStart=/usr/bin/ssh -qNn \
      -o ServerAliveInterval=30 \
      -o ServerAliveCountMax=3 \
      -o ExitOnForwardFailure=yes \
      -o StrictHostKeyChecking=no \
      -o UserKnownHostsFile=/dev/null \
      -i /etc/sshtunnel/id_rsa \
      -R 9001:localhost:22 \
      [email protected] -p 443
    Restart=always
    RestartSec=60
    
    [Install]
    WantedBy=multi-user.target
    
    다음과 같이 설명하기 위해 위에 표시되지 않은 매개변수ssh를 변경할 수 있습니다.
    매개 변수
    묘사
    9001
    ssh 클라이언트가 연결할 서버의 포트입니다.
    22
    제한된 컴퓨터에서 ssh 서버를 실행하는 포트입니다.거의 항상 기본 ssh 포트 22입니다.
    서버.그물
    서버의 인터넷 호스트 이름입니다.실제로 나는 이곳에서 동적 DNS 별명(예를 들어 duckdns.org의 호스트 이름)을 사용했기 때문에 나는 다른 목표 서버를 쉽게 다시 선택할 수 있다.
    443
    ssh 서버를 실행하는 서버의 포트입니다.일반적으로 기본값 22를 사용하지만 443을 사용하는 것을 권장합니다. 왜냐하면 전송된 연결이 제한된 방화벽에 의해 막힐 수 없기 때문입니다.그러나 443을 사용하면 서버가 이 포트에서https 서버를 실행하지 않습니다.물론 443을 사용한다면, 이 포트에서 탐지할 수 있도록 sshd 설정을 변경해야 합니다.

    서버 설정
    서버에서 sshtunnel 사용자를 위한 계정을 만들지만, 셸 로그인과 원격 명령을 사용할 수 없도록 제한합니다.서버는 원격 sshtunnel 사용자만 포트 전송을 설정할 수 있습니다.
    $ sudo useradd -m -s /bin/true sshtunnel
    $ sudo mkdir -p ~sshtunnel/.ssh
    
    제한된 컴퓨터 (/etc/sshtunnel/id_rsa.pub 에서 만든 공공 ssh 키를 서버 ~sshtunnel/.ssh/authorized_keys 의 sshtunnel 사용자의 권한 수여 키 파일로 복사합니다.
    ssh의 요구에 따라 소유자/권한을 엄격히 설정해야 합니다.
    $ sudo chown -R sshtunnel:sshtunnel ~sshtunnel/.ssh
    $ sudo chmod 700 ~sshtunnel/.ssh
    $ sudo chmod 600 ~sshtunnel/.ssh/authorized_keys
    

    최종 설정 및 테스트
    제한된 시스템에서 서비스를 활성화하고 시작합니다.
    $ sudo systemctl enable --now sshtunnel
    
    다음 도구를 사용하여 상태 및 로그를 확인합니다.
    $ sudo systemctl status sshtunnel
    $ sudo journalctl -u sshtunnel
    
    그런 다음 서버에서 제한된 시스템의 터널을 테스트합니다.
    $ ssh -p 9001 localhost
    
    문제를 진단하려면 서버와 제한된 컴퓨터의 sshd 로그를 확인하십시오.
    $ sudo journalctl -u sshd
    

    서버를 통한 외부 공용 액세스(옵션)
    대부분의 사용자에게 위의 설정은 충분하다.서버 로컬 호스트 인터페이스의 포트와 ssh 연결을 통해 터널을 사용할 수 있습니다.이 서버 내부에서 로컬로 이 서버에 연결할 수 있거나, 다른 컴퓨터에서 연결하면 ssh ProxyJump configuration 키를 사용하여 서버 에이전트를 통해 제한된 컴퓨터로 자동으로 방향을 바꾸고,localhost 인터페이스를 다시 통과할 수 있습니다.
    일부 사용자들은 터널 포트도 서버의 공공 네트워크 인터페이스에서 외부에서 접근할 수 있기를 희망할 수 있다. 예를 들어 서버 자체의 ssh 접근 권한이 없는 사용자가 사용할 수 있도록 한다.제한된 컴퓨터에 직접 연결된 공공 포트를 열고 있습니다. 만약 이렇게 한다면 이런 방법을 피하거나 최소한 비밀번호 인증을 사용하지 않고 제한된 컴퓨터에서만 사용할 수 있습니다. ssh key authentication
    다음 두 단계를 추가로 수행합니다.
  • 서버, GateWayPorts yes에서 사용/etc/ssh/sshd_config.그리고 sudo systemctl reload sshd 이걸 바꾸면.
  • 제한 컴퓨터의 경우 /etc/systemd/system/sshtunnel.service 파일의 포트 번호 앞에 콜론(":")을 붙입니다. 따라서 ssh 옵션은 -R :9001:localhost:22이 아니라 -R 9001:localhost:22입니다.그리고 sudo systemctl daemon-reload하고 sudo systemctl restart sshtunnel 하세요.

  • 제거
    여기에 설명된 모든 변경 사항을 삭제하려면 다음과 같이 하십시오.
    제한된 시스템:
    sudo systemctl disable --now sshtunnel
    sudo rm /etc/systemd/system/sshtunnel.service
    sudo rm -rf /etc/sshtunnel
    
    서버에서 다음을 수행합니다.
    $ sudo userdel -r sshtunnel
    
    GateWayPorts yes에서 비활성화/etc/ssh/sshd_config, 추가된 경우sudo systemctl reload sshd.

    좋은 웹페이지 즐겨찾기