루트 SSH 연결을 통해 파일을 자동으로 복사하는 안전한 방법

루트 SSH 연결을 통해 파일을 자동으로 복사하는 안전한 방법

현재 홈 서버에서 몇 가지 다른 서비스가 실행되고 있으며 단순화를 위해 단일 VM에서 certbot을 통해 인증서를 관리하고 SCP를 사용하여 네트워크를 통해 인증서를 복사합니다.

SSH 연결은 키로 보호되지만 자동화하여 실행하기 때문에 키 자체에는 비밀번호가 필요하지 않습니다. 이는 분명히 이상적이지 않습니다.

키는 certbot을 관리하는 VM의 루트 계정에만 저장되지만, 네트워크의 다른 시스템에 대한 루트 액세스를 위해 기본적으로 보안되지 않은 방법을 가질 필요 없이 스크립트가 파일을 복사할 수 있는 옵션을 여전히 원합니다. 누군가가 그 중 하나에 액세스했습니다.

쉘 세션을 열지 않고 SSH 연결을 통해 특정 명령만 전달되도록 허용하는 방법이 있습니까? 아니면 누구든지 옵션을 남기지 않고 주간 크론 작업에서 파일을 복사하는 다른 방법을 생각할 수 있습니까? 내 다른 컴퓨터에 SSH를 통해 연결할 사람이 있나요?

내 라우터는 토요일 저녁에만 certbot에 대한 사용자를 활성화합니다. 이를 통해 내 VM이 SSH에 접속하여 포트 80을 차단하는 방화벽 규칙을 비활성화하는 스크립트를 실행할 수 있고, certbot renew 명령을 실행하고, 방화벽 규칙을 다시 활성화하고 certbot 사용자를 비활성화합니다. . 라우터 사용자가 활성화되는 시간은 매주 최대 15분뿐이므로 이 점은 충분히 만족스럽습니다.

문제가 되는 것은 루트로 수행되는 인증서 복사이며 계정은 항상 활성화되어 있습니다.

#!/bin/bash
ssh [email protected] "/system script run certbotenable"
#ufw allow 80
certbot renew
#ufw delete allow 80
systemctl restart apache2
ssh [email protected] "/system script run certbotdisable"
scp /etc/letsencrypt/live/sazed.mydomain.com/cert.pem root@sazed:/etc/pve/local/pveproxy-ssl.pem
scp /etc/letsencrypt/live/sazed.mydomain.com/privkey.pem root@sazed:/etc/pve/local/pveproxy-ssl.key
scp /etc/letsencrypt/live/rashek.mydomain.com/cert.pem root@rashek:/root/ssl/fullchain.pem
scp /etc/letsencrypt/live/rashek.mydomain.com/privkey.pem root@rashek:/root/ssl//privkey.key
ssh root@sazed "service pveproxy restart"

답변1

여러 SSH 키 쌍을 생성할 수 있습니다.

원격 서버에서는 파일의 고급 옵션을 사용 authorized_keys하고 각 공개 키에 제한을 추가할 수 있습니다. 이를 통해 특정 키 쌍이 허용되는 로그인 액세스 양에 제한을 추가할 수 있습니다.

Authorized_keys 파일 형식 설명을 참조하세요.https://www.freebsd.org/cgi/man.cgi?sshd(8)옵션과 그 의미에 대해 알아보세요.

command=예를 들어 단일 명령/실행 파일/스크립트에만 액세스를 제한하는 유용한 옵션이 있습니다.

매우 일반적인 것은 강제로 내부 SFTP를 실행하는 것입니다. 그러면 sftp를 통한 파일 전송만 허용됩니다.

또는 from=연결이 허용되는 소스 IP를 제한합니다.

마찬가지로 지시어 /etc/ssh/sshd_config를 사용하여 루트 로그인에 대한 추가 요구 사항을 설정할 수 있습니다. Match즉, 모든 일반 사용자에 대해 비밀번호 로그인을 허용해야 하는 경우 이를 사용하여 공개 키 기반 로그인만 루트에 허용되도록 설정할 수 있습니다.

# /etc/ssh/sshd_config
#here go defaults for all connections/users
PasswordAuthentication yes
PubkeyAuthentication yes
...
# Use Match directives to override default settings and specify specific settings
# for users, groups, hosts 
# https://man.openbsd.org/sshd_config#Match
Match User root
    PasswordAuthentication no
   

물론 푸시 접근 방식이 아닌 풀 접근 방식을 구성하면 전체 루트/권한 있는 계정 문제를 방지할 수 있습니다.

관련 정보