나는 비활성화 PasswordAuthentication
SSH과 로그인을위한 공공 - 민간 키를 사용하고 있습니다. 그러나, 가이드의 수 (특히, 이 중 하나 ) 난 단지 내 특정 IP 주소에서 SSH 액세스를 허용 제안 보았다.
/etc/ssh/sshd_config:
AllowUsers deploy@(your-ip) deploy@(another-ip-if-any)
ufw allow from {your-ip} to any port 22
내 IP 주소로 제한 sshd_config
하고 방화벽 규칙을 추가하는 데 문제가 있습니까?
동적 IP 주소가 있다고 가정하면 호스팅 공급자 콘솔 터미널을 사용해야하므로 이러한 규칙은 쓸모가 없어 보입니다. 루트에 로그인하여 홈 IP에서 액세스를 허용해야합니다. 어떤 경우 : 제안 된 경로는 무엇입니까?
1 : 호스팅 공급자 터미널을 처음 사용하지 않는 한 SSH에 의한 모든 로그인을 허용하지 않습니다. 루트로 로그인하여 홈 IP에서 SSH 로의 액세스를 허용합니까?
2 : SSH 포트를 열어두고 로그인을 위해 공개-개인 키를 신뢰합니다.
3 : 다른 제안이 있습니까?
글쎄, 나는 많은 파기를했지만 아무것도 찾지 못했다. 그래서 저는 동적 DNS 서비스로 가정용 컴퓨터를 설정하고 다음 bash 스크립트를 만들었습니다. 다른 사람에게 유용 할 수 있기를 바랍니다.
이 스크립트는 SSH에만 국한 되지 않으며 동적 호스트가 해당 포트에서 수신하는 서비스와 관계없이 ufw를 사용하여 대상 포트에 영구적으로 액세스 할 수 있도록 허용하는 방법입니다. 따라서 포트 22를 사용하면 기본적으로 동적 호스트에서 SSH 로의 영구 액세스가 허용됩니다. 마찬가지로이 스크립트를 사용하여 동적 호스트에서 FTP (포트 21)와 같은 항목에 영구적으로 액세스 할 수 있습니다.
필요한 것은 파일 상단의 RemoteHostName
및 PortNumber
변수를 수정하는 것뿐입니다 . 분명히는 RemoteHostName
동적 DNS 공급자가 제공 한 호스트 이름 PortNumber
이고은 액세스를 허용하는 포트입니다.
에서 확인 된 IP가 RemoteHostName
대상 포트에 대한 액세스 권한이있는 ufw 내에 이미 존재하는 경우 변경할 사항이 없으므로 스크립트가 종료됩니다.
존재하지 않는 경우 ufw 내에 대상 포트 번호가있는 모든 항목이 삭제되고 업데이트 된 IP 주소 및 대상 포트를 사용하여 새 항목이 추가됩니다. 간단히 말해서 스크립트가 모든 포트를 탐색하므로 스크립트의 포트와 관련된 다른 규칙에 ufw를 사용 하지 마십시오 .
이 스크립트가 크론 작업 또는 다른 작업에 의해 호출되는 경우 이론적으로 항상 ufw 내에서 IP 주소를 업데이트해야합니다.
스크립트는 다음을 출력합니다.
1) Standard output: Could not resolve the IP address of the RemoveHostName XYZ
2) Standard output: No change necessary as the IP address XYZ already has access to port XYZ.
3) Standard output: Deleting old ufw rule: XYZ
4) Standard output: Adding new ufw rule: XYZ
5) Error output: Could not resolve the IP address of the RemoveHostName XYZ
하지만 저는 bash 스크립팅에 익숙 하지 않고 정규 표현식에 익숙하지 않습니다 . 따라서이 스크립트를 사용하는 경우 자신과 나에게 호의를 베풀고 살펴보십시오. 버그가 발견되면 댓글이나 새로운 답변을 남겨주세요.
#!/bin/bash
##############################################################
#Variables
##############################################################
RemoteHostName=someremotehost.dyndnsorsomething.com
PortNumber="22"
##############################################################
#Check if the dynamic IP address exists within ufw.
##############################################################
DynamicIPAddress=$(host $RemoteHostName | awk '/has address/ { print $4 }')
if [[ $DynamicIPAddress = "" ]]
then
echo $(date -u -Iseconds): Could not resolve the IP address of the RemoveHostName $RemoteHostName >&2
exit
fi
UFWRules=$(ufw status numbered)
REGEX=" $PortNumber (.*)ALLOW IN(.*)$DynamicIPAddress$"
while read -r line; do
if [[ $line =~ $REGEX ]]
then
echo $(date -u -Iseconds): No change necessary as the IP address $DynamicIPAddress already has access to port $PortNumber.
exit
fi
done <<< "$UFWRules"
##############################################################
#Remove all entries with the given port number.
##############################################################
while true
do
UFWRules=$(ufw status numbered)
REGEX="(.*) $PortNumber (.*)ALLOW IN(.*)"
Matched="No"
while read -r line; do
if [[ $line =~ $REGEX ]]
then
echo $(date -u -Iseconds): Deleting old ufw rule: $line
RuleNumber=$(echo $line | (cut -d "[" -f2 | cut -d "]" -f1))
ufw --force delete $RuleNumber
Matched="Yes"
break
fi
done <<< "$UFWRules"
if [ $Matched = "No" ]
then
break
fi
done
##############################################################
#Add in access from the dynamic IP address.
##############################################################
echo $(date -u -Iseconds): Adding new ufw rule: "ufw allow from $DynamicIPAddress to any port $PortNumber".
ufw allow from $DynamicIPAddress to any port $PortNumber
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다