autossh와 systemd는 중복됩니까?

autossh와 systemd는 중복됩니까?

영구 역방향 SSH 터널을 생성할 때 systemd를 실행하는 시스템에서 autossh가 유용합니까? 일반적으로 autossh는 -M 옵션이 0으로 설정된 서비스로 실행되어 링크 모니터링이 비활성화됩니다. 이는 autossh가 다시 시작하기 전에 ssh를 종료해야 함을 의미합니다. 매뉴얼 페이지에서:

모니터링 포트를 0으로 설정하면 모니터링 기능이 꺼지고, autossh는 ssh가 종료될 때만 ssh를 다시 시작합니다. 예를 들어 최신 버전의 OpenSSH를 사용하는 경우 ServerAliveInterval 및 ServerAliveCountMax 옵션을 사용하여 SSH 클라이언트가 더 이상 서버에 연결되어 있지 않은 것으로 확인되면 SSH 클라이언트가 종료되도록 할 수 있습니다. 여러 면에서 이는 모니터링 포트보다 더 나은 솔루션일 수 있습니다.

systemd 서비스 자체는 다음 옵션이 포함된 서비스 파일을 통해 이 작업을 수행할 수 있는 것으로 보입니다.

Type=simple
Restart=always
RestartSec=10

그렇다면 systemd 서비스에서 실행할 때 autossh는 중복됩니까? 아니면 SSH 연결을 유지하는 데 도움이 되는 다른 작업을 수행하고 있나요?

감사해요.

답변1

좋은 질문을 해주셔서 감사합니다. autossh -M 0으로 실행되는 시스템 서비스가 있습니다. 그리고 systemd와 함께 autossh를 사용하는 것이 중복된다는 것을 깨달았습니다.

이것은 내 새로운 서비스이며 autossh가 아닙니다. ssh 프로세스를 직접 종료해도 정상적으로 실행되고 다시 시작됩니다.

[Unit]
Description=autossh
Wants=network-online.target
After=network-online.target

[Service]
Type=simple
ExecStart=
ExecStart=/usr/bin/ssh -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -o ExitOnForwardFailure=yes -R8023:localhost:22 sshtunnel@[address of my server] -N -p 22 -i /root/.ssh/id_rsa_insecure
Restart=always
RestartSec=60

[Install]
WantedBy=multi-user.target

서비스 시작 방법:

  1. 서버에 sshtunnel 사용자를 생성합니다(루트 권한을 부여하지 않음)
  2. 암호화되지 않은 RSA 키 "id_rsa_insecure"를 /root/.ssh/에 넣으세요. 공개 부분을 서버의 /home/sshtunnel/.ssh/authorized_keys에 넣어야 합니다.
  3. 위 코드를 사용하여 "autossh.service" 파일을 생성하고 /etc/systemd/system에 배치합니다.
  4. 다음 명령을 실행하십시오.
sudo systemctl daemon-reload
sudo systemctl start autossh
sudo systemctl enable autossh

몇 가지 설명 사항:

ExitOnForwardFailure

이것이 제가 처음으로 놓쳤던 것입니다. 이 옵션이 없으면 어떤 이유로 포트 전달이 실패하면(실제로 그런 일이 발생합니다) SSH 터널은 존재하지만 쓸모가 없습니다. 따라서 종료하고 다시 시작해야 합니다.

/root/.ssh/id_rsa_insecure

이름에서 알 수 있듯이 키는 암호화되지 않으므로 특수 키여야 하며, 키를 사용하는 사용자가 백 채널을 생성하는 것 외에는 서버 측에서 어떤 작업도 수행할 수 없도록 제한해야 합니다. 가장 간단한 방법은 서버 측에서authorized_keys 파일의 동작을 제한하는 것입니다.

# /home/sshtunnel/.ssh/authorized_keys
command="/bin/true" ssh-rsa [the public key]

이렇게 하면 "sshtunnel" 사용자가 셸을 시작하고 명령을 실행하는 것을 방지할 수 있습니다.

추가 보안:

시도했지만 작동하지 않았습니다. 1) 서버 측: "sshtunnel" 사용자에 대한 /etc/passwd의 셸을 /bin/false로 변경합니다. 2) 서버 측: Permitopen=host:port sshtunnel을 추가합니다. Authorized_keys 파일 id_rsa_insecure 키

시도하지는 않았지만 작동할 것이라고 생각합니다. SELinux 사용자 프로필을 구성하여 "sshtunnel" 사용자를 추가로 제한할 수 있습니다(특정 포트 전달만 허용). 하지만 편리한 코드가 없습니다. 누구든지 코드를 가지고 있다면 알려주시기 바랍니다.

현재 솔루션에 존재하는 보안 버그에 대해 듣고 싶습니다. 감사해요

답변2

두 가지 방법을 모두 시도하는 것은 상대적으로 쉽기 때문에 두 방법의 신뢰성을 테스트하고 직접 확인하십시오.

autossh내 생각엔 당신이 그 직업에 더 적합하다고 생각할 것 같아요 . autossh실행되도록 설계됨전망, systemd주로 다음을 위해 설계되었습니다.배경특정 서비스에 첨부되지 않음텔레타이프라이터.

또한 autossh이 작업과 관련된 기능이 하나 이상 있어야 합니다.

autossh는 주기적으로(기본적으로 10분마다) 모니터 전달 포트에서 트래픽 전달을 시도합니다. 실패하면 autossh는 ssh 하위 프로세스를 종료하고(아직 실행 중인 경우) 새 프로세스를 시작합니다.

따라서 autossh프로세스를 계속 실행하는 대신 연결이 ssh실제로 작동하는지 확인하십시오.

관련 정보