새로운 직원이 합류했는데 테스트 서버에 대한 액세스를 허용해야 합니다. 보통 저는 템플릿을 사용하고 환경 유형에 따라 이 템플릿을 서버에 업로드합니다. 하지만 이번에는 다른 접근 방식을 사용하고 싶습니다. 사용자가 사용할 수 없는 경우에만 sshd_config
새 사용자를 추가하고 싶습니다.AllowUsers
모듈을 시도했지만 lineinfile
지금까지 성공하지 못했습니다.
답변1
필터 사용커뮤니티.일반.jc분석하다/etc/ssh/sshd_config
변수 선언
sshd_conf: "{{ sshd_out.stdout|community.general.jc('sshd_conf') }}"
그리고 파일을 읽어보세요
- command: cat /etc/ssh/sshd_config
register: sshd_out
구성된 목록 가져오기사용자 허용
sshd_allow_users: "{{ sshd_conf.allowusers|d('')|split }}"
다른 모듈을 사용하여 파일을 읽을 수도 있습니다(slurp, fetch 등). 필터를 사용하려면 설치해야 합니다.제시컨트롤러에서. 설치할 수 없거나 설치하고 싶지 않은 경우 구성을 직접 해결하세요. 명령 사용
- command: sshd -T
register: sshd_out
그리고 변수 선언
sshd_allow_users: "{{ sshd_out.stdout_lines|
select('match', 'allowusers')|
map('split')|map('last') }}"
목록을 추가하고 연결할 사용자 목록을 선언합니다.
sshd_allow_users_add: [alice, bob]
sshd_conf_update:
AllowUsers: "{{ (sshd_allow_users + sshd_allow_users_add)|flatten|unique|sort }}"
예를 들어, 주어진 파일
shell> grep AllowUsers /etc/ssh/sshd_config
AllowUsers cloe
업데이트해
- lineinfile:
path: /etc/ssh/sshd_config
firstmatch: true
regexp: '^\s*{{ item.key }}\s+(.*)$'
line: "{{ item.key }} {{ item.value|join(' ') }}"
validate: sshd -t -f %s
loop: "{{ sshd_conf_update|dict2items }}"
양보--확인--차이점모델
TASK [lineinfile] ********************************************************************
--- before: /etc/ssh/sshd_config (content)
+++ after: /etc/ssh/sshd_config (content)
@@ -127,4 +127,4 @@
# AllowTcpForwarding no
# PermitTTY no
# ForceCommand cvs server
-AllowUsers cloe
+AllowUsers alice bob cloe
changed: [localhost] => (item={'key': 'AllowUsers', 'value': ['alice', 'bob', 'cloe']})
테스트를 위한 완전한 플레이북 예시
- hosts: all
become: true
vars:
sshd_allow_users_add: [alice, bob]
sshd_conf_update:
AllowUsers: "{{ (sshd_allow_users + sshd_allow_users_add)|flatten|unique|sort }}"
sshd_conf: "{{ sshd_out.stdout|community.general.jc('sshd_conf') }}"
sshd_allow_users: "{{ sshd_conf.allowusers|d('')|split }}"
tasks:
- command: cat /etc/ssh/sshd_config
register: sshd_out
check_mode: false
changed_when: false
- debug:
msg: |
sshd_conf:
{{ sshd_conf|to_yaml|indent(2) }}
sshd_allow_users_add: {{ sshd_allow_users_add }}
sshd_conf_update:
{{ sshd_conf_update|to_yaml|indent(2) }}
when: debug|d(false)|bool
- lineinfile:
path: /etc/ssh/sshd_config
firstmatch: true
regexp: '^\s*{{ item.key }}\s+(.*)$'
line: "{{ item.key }} {{ item.value|join(' ') }}"
validate: sshd -t -f %s
loop: "{{ sshd_conf_update|dict2items }}"
묻다:'분할'이라는 필터가 없습니다.
답: 필터나뉘다2.11부터 이용 가능합니다. 이 필터를 사용할 수 없는 경우 이 방법을 사용하세요.나뉘다()첫 번째 경우
sshd_allow_users: "{{ (sshd_conf.allowusers|d('')).split() }}"
그리고 필터를 사용하세요정규식_교체두 번째 경우
sshd_allow_users: "{{ sshd_out.stdout_lines|
select('match', 'allowusers')|
map('regex_replace', '^(.*) (.*)$', '\\2') }}"
답변2
솔직히 그런 느낌이에요XY 문제-- 문제에 대한 특정 솔루션을 구현하는 방법을 문의했지만 그 솔루션은... 기껏해야 차선책입니다.
포장을 풀어보자. 테스트 서버에 연결할 권한이 있는 신규 직원이 SSH를 통해 연결할 수 있는지 확인하고 싶고 파일 AllowUsers
에 목록을 유지하여 이를 수행 하려고 합니다 sshd_config
. 이 작업을 수행하면 Ansible을 통해 임의의 구성 파일을 수정하는 것이 까다로울 수 있으며 lineinfile
우연히 문제가 발생할 수 있다는 문제에 직면하게 됩니다.
이 특정 방법을 얼마나 좋아하는지에 따라 몇 가지 가능한 옵션이 있습니다.
하나는 Sotto Voce가 이미 지적했듯이 파일에 사용자를 명시적으로 지정하는 것이 아니라 시스템 수준 그룹을 생성하고 해당 사용자를 모듈의 ansible을 통해 sshd_config
일반적인 방법으로 그룹에 추가하고 다음과 일치하는 항목이 있는지 확인하는 것입니다. 그룹.ssh_allowed
ansible.builtin.user
sshd_config
AllowGroup ssh_allowed
두 가지 최신 버전의 sshd가 이 Include
설명을 지원합니다. 귀하의 경우 수동으로 확인해야 할 수도 있습니다. 그러면 더 간단한 해결책이 있습니다.
먼저 라인을 추가하세요.
Include /etc/ssh/sshd_config.d/*.conf
기본 sshd_config
구성 파일의 경우 기본 제공 템플릿에서 생성할 수 있는 파일을 생성합니다. /etc/ssh/sshd_config.d/01-authusers.conf
이는 나머지 서버 수준 sshd 구성과 완전히 독립적이기 때문입니다.
답변3
(원래 댓글이었는데 답변으로 옮겼습니다)
AllowGroups
비슷한 작업을 수행할 때 파일의 한 줄에 정적 그룹 목록을 사용 sshd_config
하고 일반 Unix/Linux 그룹 멤버십을 통해 액세스를 관리했습니다. 그룹 멤버십을 관리하기 위한 Ansible(또는 기타 구성 관리 제품군)의 도구는 sshd_config 파일의 중간을 편집하는 것보다 훨씬 쉽습니다. 사용자 이름과 일치하는 기본 그룹으로 사용자를 생성하는 일반적인 관행을 따르면 다음을 AllowGroups
허용할 수 있습니다 . 개인 사용자는 물론 그룹도 마찬가지입니다.
AllowGroups
/ 는 AllowUsers
대부분의 사람들이 기대하지 않는 방식으로 작동합니다. / line AllowGroups
에 그룹/사용자가 있는 경우AllowUsers
회선에서는 그룹/사용자만 허용SSH를 통해 로그인하세요. 다른 모든 그룹/사용자는 거부됩니다. IMO의 이름을 지정 AllowOnlyTheseGroups
하고 AllowOnlyTheseUsers
작동 방식을 더 정확하게 설명합니다.
AllowGroups
여러 줄 이나 파일의 줄을 구성하려고 할 때는 AllowUsers
주의하십시오 sshd_config
. 이 두 매개변수는 대부분의 다른 SSH 구성 매개변수와 유사합니다. 즉, 구성 파일에 나타나는 첫 번째 매개변수가 우선합니다. 두 번째, 세 번째 등의 발생은 무시됩니다. 에 등장하더라도 Include
.