-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgithub-setup.sh
More file actions
248 lines (214 loc) · 7.71 KB
/
github-setup.sh
File metadata and controls
248 lines (214 loc) · 7.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
#!/bin/bash
# =============================================================
# GitHub SSH Key Kurulum Scripti (Tek seferlik)
# Kullanım: chmod +x github-setup.sh && ./github-setup.sh
# =============================================================
set -e
# ── Renkler ──
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
CYAN='\033[0;36m'
NC='\033[0m'
info() { echo -e "${CYAN}[BİLGİ]${NC} $1"; }
ok() { echo -e "${GREEN}[OK]${NC} $1"; }
warn() { echo -e "${YELLOW}[UYARI]${NC} $1"; }
err() { echo -e "${RED}[HATA]${NC} $1"; }
# ── 1. Git kontrolü ──
if ! command -v git &> /dev/null; then
err "git bulunamadı. Kurmak için: sudo apt install git -y"
exit 1
fi
ok "git kurulu: $(git --version)"
# ── 2. Anahtar algoritması seçimi ──
echo ""
echo "=========================================================="
echo -e "${CYAN} SSH KEY ALGORİTMA SEÇİMİ${NC}"
echo "=========================================================="
echo ""
echo " 1) ed25519 - Modern, hızlı, güvenli (önerilen)"
echo " 2) RSA 4096-bit - Klasik, yüksek uyumluluk"
echo " 3) ECDSA 521-bit - Eliptik eğri, orta yol"
echo ""
read -rp "Seçimin (1/2/3) [varsayılan: 1]: " ALGO_CHOICE
ALGO_CHOICE=${ALGO_CHOICE:-1}
case "$ALGO_CHOICE" in
1)
KEY_TYPE="ed25519"
KEY_ARGS="-t ed25519"
KEY_FILE="id_ed25519"
;;
2)
KEY_TYPE="RSA 4096"
KEY_ARGS="-t rsa -b 4096"
KEY_FILE="id_rsa"
;;
3)
KEY_TYPE="ECDSA 521"
KEY_ARGS="-t ecdsa -b 521"
KEY_FILE="id_ecdsa"
;;
*)
warn "Geçersiz seçim, ed25519 kullanılacak."
KEY_TYPE="ed25519"
KEY_ARGS="-t ed25519"
KEY_FILE="id_ed25519"
;;
esac
ok "Seçilen algoritma: $KEY_TYPE"
# ── 3. SSH key kontrolü / oluşturma ──
SSH_KEY="$HOME/.ssh/$KEY_FILE"
if [ -f "$SSH_KEY" ]; then
warn "Mevcut SSH key bulundu: $SSH_KEY"
read -rp "Mevcut anahtarı kullanmak ister misin? (E/h): " USE_EXISTING
if [[ "$USE_EXISTING" =~ ^[Hh]$ ]]; then
SSH_KEY="${SSH_KEY}_github"
info "Yeni anahtar oluşturuluyor: $SSH_KEY"
else
ok "Mevcut anahtar kullanılacak."
SKIP_CREATE=true
fi
fi
if [ "$SKIP_CREATE" != true ]; then
read -rp "Yorum ekle (e-posta, etiket veya boş bırak): " KEY_COMMENT
if [ -n "$KEY_COMMENT" ]; then
KEY_ARGS="$KEY_ARGS -C \"$KEY_COMMENT\""
else
KEY_ARGS="$KEY_ARGS -C \"\""
fi
# ── Parola koruması ──
echo ""
echo "=========================================================="
echo -e "${CYAN} PAROLA KORUMASI${NC}"
echo "=========================================================="
echo ""
echo " Parola eklemek key dosyanızı korur. Birisi dosyayı"
echo " ele geçirse bile parola olmadan kullanamaz."
echo ""
read -rp "Parola koruması eklemek ister misin? (E/h) [varsayılan: E]: " USE_PASSPHRASE
USE_PASSPHRASE=${USE_PASSPHRASE:-E}
mkdir -p "$HOME/.ssh"
if [[ "$USE_PASSPHRASE" =~ ^[Hh]$ ]]; then
eval ssh-keygen $KEY_ARGS -f "$SSH_KEY" -N '""'
else
info "Parola korumalı SSH key oluşturuluyor..."
echo " (Güçlü bir parola girin, her kullanımda sorulacaktır)"
echo ""
eval ssh-keygen $KEY_ARGS -f "$SSH_KEY"
fi
# ── KDF turlarını artır (brute-force'a karşı ekstra koruma) ──
info "Anahtar dosyası güçlendiriliyor (100 KDF turu)..."
ssh-keygen -p -o -a 100 -f "$SSH_KEY"
ok "SSH key oluşturuldu ve güçlendirildi."
echo ""
echo -e "${GREEN} Key Detayları:${NC}"
echo " ─────────────────────────────────"
echo " Algoritma : $KEY_TYPE"
echo " KDF Turları : 100 (varsayılan: 16)"
echo " Parola : $(if [[ "$USE_PASSPHRASE" =~ ^[Hh]$ ]]; then echo 'Yok'; else echo 'Aktif'; fi)"
echo " Dosya : $SSH_KEY"
echo " Önbellek : $CACHE_LABEL"
echo " ─────────────────────────────────"
fi
# ── 4. Parola önbellekleme süresi ──
echo ""
echo "=========================================================="
echo -e "${CYAN} PAROLA ÖNBELLEKLEME SÜRESİ${NC}"
echo "=========================================================="
echo ""
echo " Parolayı bir kez girdikten sonra ne kadar süre"
echo " tekrar sorulmasın?"
echo ""
echo " 1) 1 saat (3600 sn)"
echo " 2) 4 saat (14400 sn)"
echo " 3) 8 saat (28800 sn) - iş günü"
echo " 4) 24 saat (86400 sn)"
echo " 5) Oturum boyu (yeniden başlatana kadar)"
echo ""
read -rp "Seçimin (1/2/3/4/5) [varsayılan: 3]: " CACHE_CHOICE
CACHE_CHOICE=${CACHE_CHOICE:-3}
case "$CACHE_CHOICE" in
1) CACHE_SEC=3600; CACHE_LABEL="1 saat" ;;
2) CACHE_SEC=14400; CACHE_LABEL="4 saat" ;;
3) CACHE_SEC=28800; CACHE_LABEL="8 saat" ;;
4) CACHE_SEC=86400; CACHE_LABEL="24 saat" ;;
5) CACHE_SEC=0; CACHE_LABEL="Oturum boyu" ;;
*) CACHE_SEC=28800; CACHE_LABEL="8 saat" ;;
esac
ok "Önbellekleme süresi: $CACHE_LABEL"
# ── 5. ssh-agent systemd servisi (Pi her açıldığında otomatik başlar) ──
AGENT_SERVICE_DIR="$HOME/.config/systemd/user"
AGENT_SERVICE="$AGENT_SERVICE_DIR/ssh-agent.service"
mkdir -p "$AGENT_SERVICE_DIR"
if [ "$CACHE_SEC" -eq 0 ]; then
AGENT_EXEC="/usr/bin/ssh-agent -D -a %t/ssh-agent.socket"
else
AGENT_EXEC="/usr/bin/ssh-agent -D -a %t/ssh-agent.socket -t ${CACHE_SEC}"
fi
cat > "$AGENT_SERVICE" <<EOF
[Unit]
Description=SSH Key Agent
[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
ExecStart=$AGENT_EXEC
ExecStartPost=/bin/sleep 1
[Install]
WantedBy=default.target
EOF
systemctl --user daemon-reload
systemctl --user enable ssh-agent.service
systemctl --user restart ssh-agent.service
ok "ssh-agent servisi kuruldu (otomatik başlar)."
# ── Ortam değişkenini .bashrc'ye ekle ──
SSH_ENV_LINE='export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"'
if ! grep -qF "ssh-agent.socket" "$HOME/.bashrc" 2>/dev/null; then
echo "" >> "$HOME/.bashrc"
echo "# SSH Agent socket (otomatik)" >> "$HOME/.bashrc"
echo "$SSH_ENV_LINE" >> "$HOME/.bashrc"
ok "SSH_AUTH_SOCK .bashrc'ye eklendi."
fi
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
# ── Key'i agent'a ekle ──
ssh-add "$SSH_KEY" 2>/dev/null
ok "SSH key agent'a eklendi (önbellek: $CACHE_LABEL)."
# ── 6. SSH config ayarla ──
SSH_CONFIG="$HOME/.ssh/config"
if ! grep -q "github.com" "$SSH_CONFIG" 2>/dev/null; then
cat >> "$SSH_CONFIG" <<EOF
Host github.com
HostName github.com
User git
IdentityFile $SSH_KEY
IdentitiesOnly yes
AddKeysToAgent yes
EOF
chmod 600 "$SSH_CONFIG"
ok "SSH config güncellendi."
fi
# ── 7. Public key'i göster ──
echo ""
echo "=========================================================="
echo -e "${YELLOW} AŞAĞIDAKİ PUBLIC KEY'İ GITHUB'A EKLE${NC}"
echo "=========================================================="
echo ""
cat "${SSH_KEY}.pub"
echo ""
echo "=========================================================="
echo ""
echo "Adımlar:"
echo " 1. https://github.com/settings/keys adresine git"
echo " 2. 'New SSH key' butonuna tıkla"
echo " 3. Yukarıdaki anahtarı yapıştır ve kaydet"
echo ""
read -rp "GitHub'a ekledikten sonra devam etmek için ENTER'a bas..."
# ── 8. Bağlantı testi ──
info "GitHub SSH bağlantısı test ediliyor..."
if ssh -T git@github.com 2>&1 | grep -q "successfully authenticated"; then
ok "GitHub bağlantısı başarılı!"
else
warn "Bağlantı yanıtı alınamadı. Key'i GitHub'a eklediğinden emin ol."
fi
echo ""
ok "Kurulum tamamlandı! Artık 'mygit-cli.sh' ile repo klonlayabilirsin."
echo ""