Skip to content

Commit 7916d7d

Browse files
committed
Refactor SSH key handling and update .gitignore
1 parent 7eb2044 commit 7916d7d

6 files changed

Lines changed: 58 additions & 68 deletions

File tree

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,7 @@ jepsen/.lein-*
2929
jepsen/.nrepl-port
3030
.m2/
3131
jepsen/store/
32+
33+
# Jepsen local SSH keys (generated locally; never commit)
34+
jepsen/docker/id_rsa
35+
jepsen/.ssh/

jepsen/Vagrantfile

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
require "fileutils"
2+
13
NODES = {
24
ctrl: "192.168.56.10",
35
n1: "192.168.56.11",
@@ -7,6 +9,19 @@ NODES = {
79
n5: "192.168.56.15"
810
}.freeze
911

12+
KEY_DIR = File.join(__dir__, ".ssh")
13+
CTRL_KEY = File.join(KEY_DIR, "ctrl_id_rsa")
14+
CTRL_PUB = "#{CTRL_KEY}.pub"
15+
16+
unless File.exist?(CTRL_KEY)
17+
FileUtils.mkdir_p(KEY_DIR)
18+
unless system("ssh-keygen", "-t", "rsa", "-b", "2048", "-N", "", "-f", CTRL_KEY)
19+
raise "failed to generate Jepsen SSH key at #{CTRL_KEY}"
20+
end
21+
end
22+
23+
CTRL_PUB_KEY = File.read(CTRL_PUB).strip
24+
1025
Vagrant.configure("2") do |config|
1126
config.ssh.insert_key = false
1227
#config.vm.box = "debian/bookworm64"
@@ -37,7 +52,7 @@ Vagrant.configure("2") do |config|
3752
node.vm.synced_folder ".", "/vagrant", disabled: true
3853
end
3954

40-
node.vm.provision "shell", path: "provision/base.sh", args: name.to_s
55+
node.vm.provision "shell", path: "provision/base.sh", args: [name.to_s, CTRL_PUB_KEY]
4156
end
4257
end
4358
end

jepsen/docker/id_rsa

Lines changed: 0 additions & 27 deletions
This file was deleted.

jepsen/docker/run-in-docker.sh

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,23 @@ if ! command -v lein >/dev/null 2>&1; then
2424
chmod +x /usr/local/bin/lein
2525
fi
2626

27-
# Generate SSH key for control node to connect to others
27+
# Generate or install SSH key for control node to connect to others
2828
if [ ! -f /root/.ssh/id_rsa ]; then
2929
mkdir -p /root/.ssh
30-
cp /jepsen-ro/jepsen/docker/id_rsa /root/.ssh/id_rsa
30+
if [ -n "${JEPSEN_SSH_PRIVATE_KEY:-}" ]; then
31+
printf "%s" "${JEPSEN_SSH_PRIVATE_KEY}" > /root/.ssh/id_rsa
32+
elif [ -n "${JEPSEN_SSH_PRIVATE_KEY_PATH:-}" ] && [ -f "${JEPSEN_SSH_PRIVATE_KEY_PATH}" ]; then
33+
cp "${JEPSEN_SSH_PRIVATE_KEY_PATH}" /root/.ssh/id_rsa
34+
elif [ -f /jepsen-ro/jepsen/docker/id_rsa ]; then
35+
# Backward-compatible path (local, uncommitted key file)
36+
cp /jepsen-ro/jepsen/docker/id_rsa /root/.ssh/id_rsa
37+
else
38+
if ! command -v ssh-keygen >/dev/null 2>&1; then
39+
apt-get update -y
40+
apt-get install -y --no-install-recommends openssh-client
41+
fi
42+
ssh-keygen -t rsa -b 2048 -N "" -f /root/.ssh/id_rsa
43+
fi
3144
chmod 600 /root/.ssh/id_rsa
3245
# Disable strict host checking
3346
echo "Host *" > /root/.ssh/config

jepsen/docker/ssh_config

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ Host n1
22
HostName 127.0.0.1
33
User vagrant
44
Port 2221
5-
IdentityFile /Users/bootjp/src/elastickv/jepsen/docker/id_rsa
5+
IdentityFile ~/.ssh/id_rsa
66
StrictHostKeyChecking no
77
UserKnownHostsFile /dev/null
88
LogLevel ERROR
@@ -11,7 +11,7 @@ Host n2
1111
HostName 127.0.0.1
1212
User vagrant
1313
Port 2222
14-
IdentityFile /Users/bootjp/src/elastickv/jepsen/docker/id_rsa
14+
IdentityFile ~/.ssh/id_rsa
1515
StrictHostKeyChecking no
1616
UserKnownHostsFile /dev/null
1717
LogLevel ERROR
@@ -20,7 +20,7 @@ Host n3
2020
HostName 127.0.0.1
2121
User vagrant
2222
Port 2223
23-
IdentityFile /Users/bootjp/src/elastickv/jepsen/docker/id_rsa
23+
IdentityFile ~/.ssh/id_rsa
2424
StrictHostKeyChecking no
2525
UserKnownHostsFile /dev/null
2626
LogLevel ERROR
@@ -29,7 +29,7 @@ Host n4
2929
HostName 127.0.0.1
3030
User vagrant
3131
Port 2224
32-
IdentityFile /Users/bootjp/src/elastickv/jepsen/docker/id_rsa
32+
IdentityFile ~/.ssh/id_rsa
3333
StrictHostKeyChecking no
3434
UserKnownHostsFile /dev/null
3535
LogLevel ERROR
@@ -38,7 +38,7 @@ Host n5
3838
HostName 127.0.0.1
3939
User vagrant
4040
Port 2225
41-
IdentityFile /Users/bootjp/src/elastickv/jepsen/docker/id_rsa
41+
IdentityFile ~/.ssh/id_rsa
4242
StrictHostKeyChecking no
4343
UserKnownHostsFile /dev/null
4444
LogLevel ERROR

jepsen/provision/base.sh

Lines changed: 18 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
set -euo pipefail
33

44
ROLE="${1:-db}"
5+
PUBKEY="${2:-}"
56

67
echo "[jepsen] provisioning role=${ROLE}"
78
sudo apt-get update -y
@@ -44,38 +45,20 @@ if [ "$ROLE" = "ctrl" ]; then
4445
echo 'export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin' | sudo tee /etc/profile.d/go.sh >/dev/null
4546

4647
if [ ! -f /home/vagrant/.ssh/id_rsa ]; then
47-
cat <<'KEY' > /home/vagrant/.ssh/id_rsa
48-
-----BEGIN RSA PRIVATE KEY-----
49-
MIIEogIBAAKCAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzI
50-
w+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoP
51-
kcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2
52-
hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NO
53-
Td0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcW
54-
yLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQIBIwKCAQEA4iqWPJXtzZA68mKd
55-
ELs4jJsdyky+ewdZeNds5tjcnHU5zUYE25K+ffJED9qUWICcLZDc81TGWjHyAqD1
56-
Bw7XpgUwFgeUJwUlzQurAv+/ySnxiwuaGJfhFM1CaQHzfXphgVml+fZUvnJUTvzf
57-
TK2Lg6EdbUE9TarUlBf/xPfuEhMSlIE5keb/Zz3/LUlRg8yDqz5w+QWVJ4utnKnK
58-
iqwZN0mwpwU7YSyJhlT4YV1F3n4YjLswM5wJs2oqm0jssQu/BT0tyEXNDYBLEF4A
59-
sClaWuSJ2kjq7KhrrYXzagqhnSei9ODYFShJu8UWVec3Ihb5ZXlzO6vdNQ1J9Xsf
60-
4m+2ywKBgQD6qFxx/Rv9CNN96l/4rb14HKirC2o/orApiHmHDsURs5rUKDx0f9iP
61-
cXN7S1uePXuJRK/5hsubaOCx3Owd2u9gD6Oq0CsMkE4CUSiJcYrMANtx54cGH7Rk
62-
EjFZxK8xAv1ldELEyxrFqkbE4BKd8QOt414qjvTGyAK+OLD3M2QdCQKBgQDtx8pN
63-
CAxR7yhHbIWT1AH66+XWN8bXq7l3RO/ukeaci98JfkbkxURZhtxV/HHuvUhnPLdX
64-
3TwygPBYZFNo4pzVEhzWoTtnEtrFueKxyc3+LjZpuo+mBlQ6ORtfgkr9gBVphXZG
65-
YEzkCD3lVdl8L4cw9BVpKrJCs1c5taGjDgdInQKBgHm/fVvv96bJxc9x1tffXAcj
66-
3OVdUN0UgXNCSaf/3A/phbeBQe9xS+3mpc4r6qvx+iy69mNBeNZ0xOitIjpjBo2+
67-
dBEjSBwLk5q5tJqHmy/jKMJL4n9ROlx93XS+njxgibTvU6Fp9w+NOFD/HvxB3Tcz
68-
6+jJF85D5BNAG3DBMKBjAoGBAOAxZvgsKN+JuENXsST7F89Tck2iTcQIT8g5rwWC
69-
P9Vt74yboe2kDT531w8+egz7nAmRBKNM751U/95P9t88EDacDI/Z2OwnuFQHCPDF
70-
llYOUI+SpLJ6/vURRbHSnnn8a/XG+nzedGH5JGqEJNQsz+xT2axM0/W/CRknmGaJ
71-
kda/AoGANWrLCz708y7VYgAtW2Uf1DPOIYMdvo6fxIB5i9ZfISgcJ/bbCUkFrhoH
72-
+vq/5CIWxCPp0f85R4qxxQ5ihxJ0YDQT9Jpx4TMss4PSavPaBH3RXow5Ohe+bYoQ
73-
NE5OgEXk2wVfZczCZpigBKbKZHNYcelXtTt/nP3rsCuGcM4h53s=
74-
-----END RSA PRIVATE KEY-----
75-
KEY
48+
if [ -f /home/vagrant/elastickv/jepsen/.ssh/ctrl_id_rsa ]; then
49+
cp /home/vagrant/elastickv/jepsen/.ssh/ctrl_id_rsa /home/vagrant/.ssh/id_rsa
50+
else
51+
if ! command -v ssh-keygen >/dev/null 2>&1; then
52+
sudo apt-get install -y --no-install-recommends openssh-client
53+
fi
54+
ssh-keygen -t rsa -b 2048 -N "" -f /home/vagrant/.ssh/id_rsa
55+
fi
7656
chmod 600 /home/vagrant/.ssh/id_rsa
7757
chown vagrant:vagrant /home/vagrant/.ssh/id_rsa
7858
fi
59+
if [ -z "${PUBKEY}" ] && [ -f /home/vagrant/.ssh/id_rsa.pub ]; then
60+
PUBKEY="$(cat /home/vagrant/.ssh/id_rsa.pub)"
61+
fi
7962
cat <<'EOF' > /home/vagrant/.ssh/config
8063
Host n1 n2 n3 n4 n5
8164
User vagrant
@@ -87,10 +70,12 @@ EOF
8770
chown vagrant:vagrant /home/vagrant/.ssh/config
8871
fi
8972

90-
# authorize the same key on all nodes
91-
cat <<'PUB' >> /home/vagrant/.ssh/authorized_keys
92-
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDo0XyJqWW9BWnbZYOROSyu2+n15ZbrgPGFa/pM+E4xmHu4B8yMPp4jbWRhR8w/Pr9SNmCeqF3r3LdWHktKPR2cjduPaoAoM1BbXTii7+iHnaZaqD5HJhXQhr3Y+QQOjcYVMFyQU8hMAzMF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key
93-
PUB
73+
touch /home/vagrant/.ssh/authorized_keys
74+
if [ -n "${PUBKEY}" ]; then
75+
if ! grep -Fq "${PUBKEY}" /home/vagrant/.ssh/authorized_keys; then
76+
echo "${PUBKEY}" >> /home/vagrant/.ssh/authorized_keys
77+
fi
78+
fi
9479
chown vagrant:vagrant /home/vagrant/.ssh/authorized_keys
9580
chmod 600 /home/vagrant/.ssh/authorized_keys
9681

0 commit comments

Comments
 (0)