qubes-apply
python script to automate qubes saltstack
git clone https://9o.is/git/qubes-apply.git
client.sls
(2550B)
1 {% set sshfs = salt['pillar.get']('sshfs-sync') %}
2
3 ~user/.ssh/id_ed25519:
4 file.managed:
5 - contents_pillar: sshfs-sync:key
6 - user: user
7 - group: user
8 - mode: 0600
9 - dir_mode: 0700
10 - makedirs: True
11 - show_changes: False
12
13 ~user/.ssh/known_hosts:
14 file.managed:
15 - user: user
16 - group: user
17 - mode: 0600
18 - dir_mode: 0700
19 - makedirs: True
20 - contents: |
21 {%- for _, server in sshfs.servers.items() %}
22 [localhost]:{{ server.port }} ssh-ed25519 {{ server.key }}
23 {%- endfor %}
24
25 {% for name, server in sshfs.servers.items() %}
26 {% set mount_file = server.dir | replace('/', '-') | lower | regex_replace('^-', '') + '.mount' %}
27
28 {{ server.dir }}:
29 file.directory:
30 - user: user
31 - group: user
32 - mode: 0755
33
34 ~user/.config/systemd/user/sshfs-{{ name }}.socket:
35 file.managed:
36 - user: user
37 - group: user
38 - makedirs: True
39 - contents: |
40 [Unit]
41 Description=Forward sshfs connection for {{ name }}
42 ConditionPathExists=/var/run/qubes-service/sshfs-{{ name }}
43
44 [Socket]
45 ListenStream=127.0.0.1:{{ server.port }}
46 BindToDevice=lo
47 Accept=true
48
49 [Install]
50 WantedBy=default.target
51
52 ~user/.config/systemd/user/sshfs-{{ name }}@.service
53 file.managed:
54 - user: user
55 - group: user
56 - makedirs: True
57 - contents: |
58 [Unit]
59 Description=Forward sshfs connection for {{ name }}
60
61 [Service]
62 ExecStart=/usr/bin/qrexec-client-vm '{{ name }}' qubes.ConnectSSH
63 StandardInput=socket
64 StandardOutput=inherit
65
66 ~user/.config/systemd/user/{{ mount_file }}:
67 file.managed:
68 - user: user
69 - group: user
70 - makedirs: True
71 - contents: |
72 [Unit]
73 Description=Mount SSHFS {{ server.dir }}
74 ConditionPathExists=/var/run/qubes-service/sshfs-{{ name }}
75
76 [Mount]
77 What=sync-{{ sshfs.name }}@localhost:/sync
78 Where={{ server.dir }}
79 Type=fuse.sshfs
80 Options=port={{ server.port }},uid=1000,gid=1000,follow_symlinks,reconnect
81
82 [Install]
83 WantedBy=default.target
84
85 ~user/.config/systemd/user/default.target.wants/sshfs-{{ name }}.socket:
86 file.symlink:
87 - target: ~user/.config/systemd/user/sshfs-{{ name }}.socket
88 - user: user
89 - group: user
90 - makedirs: True
91
92 ~user/.config/systemd/user/default.target.wants/{{ mount_file }}:
93 file.symlink:
94 - target: ~user/.config/systemd/user/{{ mount_file }}
95 - user: user
96 - group: user
97 - makedirs: True
98
99 {% endfor %}
100