Duplicity를 사용하여 컴퓨터에 서버 백업을 수행해야합니다.
duplicity /etc sftp://backup@my.dynamic.ip.address//home/backup
이 작업을 수행하기 전에 다음을 수행하여 암호가없는 액세스를 허용해야합니다.
$ ssh-keygen
$ ssh-copy-id backup@my.dynamic.ip.address
$ ssh backup@my.dynamic.ip.address
내 질문은, 생성 된 공개 키 에서이 SFTP 전송으로 명령을 어떻게 제한합니까?
command="restrict to sftp",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…
동적 IP 주소를 사용하고 있으므로 IP가 변경 될 때마다 “알려진 호스트 누락”문제를 어떻게 극복 할 수 있습니까?
답변
질문 1
내 질문은, 생성 된 공개 키 에서이 SFTP 전송으로 명령을 어떻게 제한합니까?
이를위한 두 가지 방법이 있습니다.
1.-sshd를 통한 제한
이 방법에는 SSH 데몬 내에 SFTP 기능을 설정하는 과정이 포함됩니다 sshd
. 이것은 /etc/ssh/sshd_config
구성 파일을 통해 제어 됩니다. 참고 : 이렇게하면 backup
서버에 SFTP 만 허용되도록 사용자가 제한됩니다 .
# /etc/ssh/sshd_config
Subsystem sftp internal-sftp
## You want to put only certain users (i.e users who belongs to sftpusers
## group) in the chroot jail environment. Add the following lines at the end
## of /etc/ssh/sshd_config
Match User backup
ForceCommand internal-sftp
2.-authorized_keys를 통한 제한
이 방법은 sshd_config
파일을 변경하지 않습니다 . command=
질문에서 이미 언급 한 기능을 통해 사용자 + SSH 키를 단일 명령으로 제한 할 수 있습니다 . 트릭은 어떤 명령을 포함 시키는가입니다. SFTP 서버를이 command=
줄 에 넣을 수 있습니다 . 이는 sshd_config
파일 에서 SFTP 서버를 설정하는 것과 같은 효과를 갖습니다 .
# User backup's $HOME/.ssh/authorized_keys file
command="/usr/libexec/openssh/sftp-server" ssh-dss AAAAC8ghi9ldw== backup@host
참고 : 사용자에게에 대한 쓰기 권한이있는 경우 ~/.ssh/authorized_keys
읽기 및 / 또는 수정할 수 있습니다. 예를 들어, 파일을 다운로드하고 편집 한 후 다시 업로드하여을 제거 commmand=...
하여 쉘을 포함하여 훼손되지 않은 명령 액세스 권한을 부여 할 수 있습니다. 사용자에게에 대한 쓰기 권한이있는 경우 ~/.ssh
단순히 파일을 연결 해제하고 다시 작성하거나 쓰기 권한을 가질 수도 chmod
있습니다. 다음과 같이 ~/.ssh/authorized_keys
사용자가 쓸 수없는 장소에 파일을 보관 하는 등의 가능한 해결책이 많이 있습니다 .
Match Group sftponly
AuthorizedKeysFile /etc/ssh/authorized_keys/%u
질문 # 2
동적 IP 주소를 사용하고 있으므로 IP가 변경 될 때마다 “알려진 호스트 누락”문제를 어떻게 극복 할 수 있습니까?
이것은 더 까다 롭지 만 파일 from=
내의 기능을 사용하면 가능 합니다 authorized_keys
. 여기서는 호스트에서만 액세스를 제한하고 있습니다 somehost.dyndns.org
.
from = “somehost.dyndns.org”, command = “/ usr / libexec / openssh / sftp-server”, 포트가없는 포워딩, No-X11- 포워딩, No- 에이전트-포워딩, No-Pty ssh-dss AAAAC8ghi9ldw == backup @ host
command=
SSH 키 사용을 더욱 제한하기 때문에 이후의 추가 설정 도 마찬가지로 중요합니다.
기능 분석
from='hostname1,hostname2,''
-지정된 IP 또는 호스트 이름 패턴에서의 액세스를 제한합니다command='command'
-인증 후 지정된 명령을 실행합니다no-pty
-pty를 할당하지 않습니다 (대화식 로그인을 허용하지 않습니다)no-port-forwarding
-포트 포워딩을 허용하지 않습니다no-X11-forwarding
-사용자는 디스플레이 X11 GUI를 제거 할 수 없습니다no-agent-forwarding
-사용자는이 호스트를 통해 다른 내부 호스트로 전달할 수 없습니다
“알려진 호스트 누락”에 대한 메시지를 제거하려면 다음과 같이 연결할 때 클라이언트에이 SSH 옵션을 추가 할 수 있습니다.
$ ssh -o StrictHostKeyChecking=no ....
ssh_config
이 스위치에 대한 자세한 내용은 매뉴얼 페이지를 참조하십시오 .
사용자의 쉘 제한
위의 두 솔루션 모두 파일 backup
에서이 사용자의 셸을 제한 하여 사용자 를 잠그고 싶을 /etc/passwd
것입니다. 일반적으로로 설정하고 scponly
싶지만 이것에 대한 다른 선택도 있습니다. 이 작업을 수행하는 방법에 대해서는 ” SCP 용 쉘이 필요합니까? ” 라는 U & L Q & A를 참조하십시오 .
위의 # 1에 설명 된대로 /sbin/nologin
chroot 기능을 사용하도록 선택한 경우에도 사용할 수 있습니다 . 그러나 # 2에 요약 된 방법을 사용하기 로 결정했다면 의 사용자 쉘에 대해 또는 다른 것을 사용해야 할 것 입니다 .sshd_config
scponly
/etc/passwd
보너스-위의 # 2 연장
이 사용자에 대한 명령 세트를 표시해야하는 경우에도이를 수행 할 수 있습니다. 다음과 같이 스크립트를 작성하십시오 /home/backup/commands.sh
.
#!/bin/sh
case $SSH_ORIGINAL_COMMAND in
"diskspace")
df -h
;;
"dirlist")
ls -1
;;
"apache_restart")
/etc/init.d/apache restart
;;
*)
echo "Unknown command"
esac
그런 다음 authorized_keys
파일을 다음 과 같이 설정하십시오 .
command="/bin/sh /home/user/commands.sh" ssh-dss AAAAC8ghi9ldw== user@host
backup
사용자는 다음과 같이이 명령을 실행할 수 있습니다 :
# diskspace
$ ssh -q user@remote_host diskspace
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/dev-root 39G 2.2G 35G 6% /
# dirlist
$ ssh -q remote_host dirlist
commands.sh
dump.sql