[{"data":1,"prerenderedAt":1118},["ShallowReactive",2],{"page-tr-\u002Fblog\u002Fssh-config-and-tunneling":3,"related-tr-\u002Fblog\u002Fssh-config-and-tunneling":1096},{"id":4,"title":5,"body":6,"date":1083,"description":1084,"extension":1085,"meta":1086,"navigation":313,"path":1087,"seo":1088,"stem":1089,"tags":1090,"translation":1094,"__hash__":1095},"pages_tr\u002Ftr\u002Fblog\u002Fssh-config-and-tunneling.md","SSH Config, Anahtar Yönetimi ve Tünelleme",{"type":7,"value":8,"toc":1066},"minimark",[9,14,27,31,82,92,95,113,117,136,141,176,180,183,234,240,244,247,398,412,440,444,447,466,469,525,531,535,540,547,572,582,585,607,611,614,638,642,645,677,739,743,821,827,831,842,876,909,915,922,926,1037,1048,1052,1062],[10,11,13],"h2",{"id":12},"giriş","Giriş",[15,16,17,18,22,23,26],"p",{},"SSH çoğumuz için ",[19,20,21],"code",{},"ssh root@1.2.3.4"," yazıp şifre girmekten ibarettir. Oysa birkaç dakikalık ayarla hem çok daha güvenli hem de çok daha hızlı bir kullanım mümkün: şifresiz anahtar girişi, ",[19,24,25],{},"ssh prod"," gibi kısayollar, bastion üzerinden tek komutla bağlanma ve uzak veritabanına lokal port üzerinden erişim.",[10,28,30],{"id":29},"_1-anahtar-üretmek","1. Anahtar üretmek",[32,33,38],"pre",{"className":34,"code":35,"language":36,"meta":37,"style":37},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","ssh-keygen -t ed25519 -C \"sukru@laptop\"\n# ~\u002F.ssh\u002Fid_ed25519      → private key (kimseyle paylaşılmaz)\n# ~\u002F.ssh\u002Fid_ed25519.pub  → public key (sunuculara eklenir)\n","bash","",[19,39,40,69,76],{"__ignoreMap":37},[41,42,45,49,53,56,59,63,66],"span",{"class":43,"line":44},"line",1,[41,46,48],{"class":47},"sBMFI","ssh-keygen",[41,50,52],{"class":51},"sfazB"," -t",[41,54,55],{"class":51}," ed25519",[41,57,58],{"class":51}," -C",[41,60,62],{"class":61},"sMK4o"," \"",[41,64,65],{"class":51},"sukru@laptop",[41,67,68],{"class":61},"\"\n",[41,70,72],{"class":43,"line":71},2,[41,73,75],{"class":74},"sHwdD","# ~\u002F.ssh\u002Fid_ed25519      → private key (kimseyle paylaşılmaz)\n",[41,77,79],{"class":43,"line":78},3,[41,80,81],{"class":74},"# ~\u002F.ssh\u002Fid_ed25519.pub  → public key (sunuculara eklenir)\n",[15,83,84,87,88,91],{},[19,85,86],{},"ed25519",", RSA'ya göre daha kısa, daha hızlı ve güncel önerilen algoritmadır. Eski sistemler için RSA gerekiyorsa en az 4096 bit kullanın: ",[19,89,90],{},"ssh-keygen -t rsa -b 4096",".",[15,93,94],{},"Anahtara passphrase vermek, dosya çalınsa bile kullanılamamasını sağlar. Sonradan eklemek ya da değiştirmek için:",[32,96,98],{"className":34,"code":97,"language":36,"meta":37,"style":37},"ssh-keygen -p -f ~\u002F.ssh\u002Fid_ed25519\n",[19,99,100],{"__ignoreMap":37},[41,101,102,104,107,110],{"class":43,"line":44},[41,103,48],{"class":47},[41,105,106],{"class":51}," -p",[41,108,109],{"class":51}," -f",[41,111,112],{"class":51}," ~\u002F.ssh\u002Fid_ed25519\n",[10,114,116],{"id":115},"_2-public-keyi-sunucuya-eklemek","2. Public key'i sunucuya eklemek",[32,118,120],{"className":34,"code":119,"language":36,"meta":37,"style":37},"ssh-copy-id -i ~\u002F.ssh\u002Fid_ed25519.pub deploy@203.0.113.10\n",[19,121,122],{"__ignoreMap":37},[41,123,124,127,130,133],{"class":43,"line":44},[41,125,126],{"class":47},"ssh-copy-id",[41,128,129],{"class":51}," -i",[41,131,132],{"class":51}," ~\u002F.ssh\u002Fid_ed25519.pub",[41,134,135],{"class":51}," deploy@203.0.113.10\n",[15,137,138,140],{},[19,139,126],{}," yoksa (ör. Windows) aynı işi elle yapabilirsiniz:",[32,142,144],{"className":34,"code":143,"language":36,"meta":37,"style":37},"cat ~\u002F.ssh\u002Fid_ed25519.pub | ssh deploy@203.0.113.10 \\\n  \"mkdir -p ~\u002F.ssh && chmod 700 ~\u002F.ssh && cat >> ~\u002F.ssh\u002Fauthorized_keys && chmod 600 ~\u002F.ssh\u002Fauthorized_keys\"\n",[19,145,146,166],{"__ignoreMap":37},[41,147,148,151,153,156,159,162],{"class":43,"line":44},[41,149,150],{"class":47},"cat",[41,152,132],{"class":51},[41,154,155],{"class":61}," |",[41,157,158],{"class":47}," ssh",[41,160,161],{"class":51}," deploy@203.0.113.10",[41,163,165],{"class":164},"sTEyZ"," \\\n",[41,167,168,171,174],{"class":43,"line":71},[41,169,170],{"class":61},"  \"",[41,172,173],{"class":51},"mkdir -p ~\u002F.ssh && chmod 700 ~\u002F.ssh && cat >> ~\u002F.ssh\u002Fauthorized_keys && chmod 600 ~\u002F.ssh\u002Fauthorized_keys",[41,175,68],{"class":61},[10,177,179],{"id":178},"_3-ssh-agent","3. ssh-agent",[15,181,182],{},"Passphrase'i her bağlantıda yazmamak için anahtarı agent'a ekleyin:",[32,184,186],{"className":34,"code":185,"language":36,"meta":37,"style":37},"eval \"$(ssh-agent -s)\"\nssh-add ~\u002F.ssh\u002Fid_ed25519\nssh-add -l                 # agent'taki anahtarlar\nssh-add -D                 # hepsini çıkar\n",[19,187,188,206,213,223],{"__ignoreMap":37},[41,189,190,194,197,200,203],{"class":43,"line":44},[41,191,193],{"class":192},"s2Zo4","eval",[41,195,196],{"class":61}," \"$(",[41,198,199],{"class":47},"ssh-agent",[41,201,202],{"class":51}," -s",[41,204,205],{"class":61},")\"\n",[41,207,208,211],{"class":43,"line":71},[41,209,210],{"class":47},"ssh-add",[41,212,112],{"class":51},[41,214,215,217,220],{"class":43,"line":78},[41,216,210],{"class":47},[41,218,219],{"class":51}," -l",[41,221,222],{"class":74},"                 # agent'taki anahtarlar\n",[41,224,226,228,231],{"class":43,"line":225},4,[41,227,210],{"class":47},[41,229,230],{"class":51}," -D",[41,232,233],{"class":74},"                 # hepsini çıkar\n",[15,235,236,237,91],{},"macOS'ta passphrase'i Keychain'de saklamak için ",[19,238,239],{},"ssh-add --apple-use-keychain ~\u002F.ssh\u002Fid_ed25519",[10,241,243],{"id":242},"_4-sshconfig-ile-kısayollar","4. ~\u002F.ssh\u002Fconfig ile kısayollar",[15,245,246],{},"Her seferinde kullanıcı, IP, port ve anahtar yazmak yerine:",[32,248,250],{"className":34,"code":249,"language":36,"meta":37,"style":37},"# ~\u002F.ssh\u002Fconfig\nHost prod\n    HostName 203.0.113.10\n    User deploy\n    Port 2222\n    IdentityFile ~\u002F.ssh\u002Fid_ed25519\n    IdentitiesOnly yes\n\nHost staging\n    HostName 203.0.113.20\n    User deploy\n\nHost github.com\n    IdentityFile ~\u002F.ssh\u002Fid_ed25519_github\n\nHost *\n    ServerAliveInterval 60\n    ServerAliveCountMax 3\n    AddKeysToAgent yes\n",[19,251,252,257,265,274,282,291,299,308,315,323,331,338,343,351,359,364,372,381,390],{"__ignoreMap":37},[41,253,254],{"class":43,"line":44},[41,255,256],{"class":74},"# ~\u002F.ssh\u002Fconfig\n",[41,258,259,262],{"class":43,"line":71},[41,260,261],{"class":47},"Host",[41,263,264],{"class":51}," prod\n",[41,266,267,270],{"class":43,"line":78},[41,268,269],{"class":47},"    HostName",[41,271,273],{"class":272},"sbssI"," 203.0.113.10\n",[41,275,276,279],{"class":43,"line":225},[41,277,278],{"class":47},"    User",[41,280,281],{"class":51}," deploy\n",[41,283,285,288],{"class":43,"line":284},5,[41,286,287],{"class":47},"    Port",[41,289,290],{"class":272}," 2222\n",[41,292,294,297],{"class":43,"line":293},6,[41,295,296],{"class":47},"    IdentityFile",[41,298,112],{"class":51},[41,300,302,305],{"class":43,"line":301},7,[41,303,304],{"class":47},"    IdentitiesOnly",[41,306,307],{"class":51}," yes\n",[41,309,311],{"class":43,"line":310},8,[41,312,314],{"emptyLinePlaceholder":313},true,"\n",[41,316,318,320],{"class":43,"line":317},9,[41,319,261],{"class":47},[41,321,322],{"class":51}," staging\n",[41,324,326,328],{"class":43,"line":325},10,[41,327,269],{"class":47},[41,329,330],{"class":272}," 203.0.113.20\n",[41,332,334,336],{"class":43,"line":333},11,[41,335,278],{"class":47},[41,337,281],{"class":51},[41,339,341],{"class":43,"line":340},12,[41,342,314],{"emptyLinePlaceholder":313},[41,344,346,348],{"class":43,"line":345},13,[41,347,261],{"class":47},[41,349,350],{"class":51}," github.com\n",[41,352,354,356],{"class":43,"line":353},14,[41,355,296],{"class":47},[41,357,358],{"class":51}," ~\u002F.ssh\u002Fid_ed25519_github\n",[41,360,362],{"class":43,"line":361},15,[41,363,314],{"emptyLinePlaceholder":313},[41,365,367,369],{"class":43,"line":366},16,[41,368,261],{"class":47},[41,370,371],{"class":164}," *\n",[41,373,375,378],{"class":43,"line":374},17,[41,376,377],{"class":47},"    ServerAliveInterval",[41,379,380],{"class":272}," 60\n",[41,382,384,387],{"class":43,"line":383},18,[41,385,386],{"class":47},"    ServerAliveCountMax",[41,388,389],{"class":272}," 3\n",[41,391,393,396],{"class":43,"line":392},19,[41,394,395],{"class":47},"    AddKeysToAgent",[41,397,307],{"class":51},[15,399,400,401,403,404,407,408,411],{},"Artık ",[19,402,25],{},", ",[19,405,406],{},"scp app.jar prod:\u002Fopt\u002Fapp\u002F"," ve ",[19,409,410],{},"rsync -az dist\u002F prod:\u002Fvar\u002Fwww\u002F"," doğrudan çalışır.",[413,414,415,422,428],"ul",{},[416,417,418,421],"li",{},[19,419,420],{},"IdentitiesOnly yes",", agent'taki tüm anahtarları tek tek denemek yerine sadece belirtileni kullanır; \"Too many authentication failures\" hatasını önler.",[416,423,424,427],{},[19,425,426],{},"ServerAliveInterval",", boşta kalan bağlantıların firewall\u002FNAT tarafından koparılmasını engeller.",[416,429,430,431,435,436,439],{},"Eşleşmede ",[432,433,434],"strong",{},"ilk bulunan değer"," geçerlidir; bu yüzden ",[19,437,438],{},"Host *"," bloğunu dosyanın sonuna koyun.",[10,441,443],{"id":442},"_5-jump-host-bastion","5. Jump host (bastion)",[15,445,446],{},"Özel ağdaki bir sunucuya sadece bastion üzerinden ulaşılabiliyorsa:",[32,448,450],{"className":34,"code":449,"language":36,"meta":37,"style":37},"ssh -J deploy@bastion.example.com deploy@10.0.1.15\n",[19,451,452],{"__ignoreMap":37},[41,453,454,457,460,463],{"class":43,"line":44},[41,455,456],{"class":47},"ssh",[41,458,459],{"class":51}," -J",[41,461,462],{"class":51}," deploy@bastion.example.com",[41,464,465],{"class":51}," deploy@10.0.1.15\n",[15,467,468],{},"Config ile kalıcı hale getirmek için:",[32,470,472],{"className":34,"code":471,"language":36,"meta":37,"style":37},"Host bastion\n    HostName bastion.example.com\n    User deploy\n\nHost db-server\n    HostName 10.0.1.15\n    User deploy\n    ProxyJump bastion\n",[19,473,474,481,488,494,498,505,512,518],{"__ignoreMap":37},[41,475,476,478],{"class":43,"line":44},[41,477,261],{"class":47},[41,479,480],{"class":51}," bastion\n",[41,482,483,485],{"class":43,"line":71},[41,484,269],{"class":47},[41,486,487],{"class":51}," bastion.example.com\n",[41,489,490,492],{"class":43,"line":78},[41,491,278],{"class":47},[41,493,281],{"class":51},[41,495,496],{"class":43,"line":225},[41,497,314],{"emptyLinePlaceholder":313},[41,499,500,502],{"class":43,"line":284},[41,501,261],{"class":47},[41,503,504],{"class":51}," db-server\n",[41,506,507,509],{"class":43,"line":293},[41,508,269],{"class":47},[41,510,511],{"class":272}," 10.0.1.15\n",[41,513,514,516],{"class":43,"line":301},[41,515,278],{"class":47},[41,517,281],{"class":51},[41,519,520,523],{"class":43,"line":310},[41,521,522],{"class":47},"    ProxyJump",[41,524,480],{"class":51},[15,526,527,530],{},[19,528,529],{},"ssh db-server"," tek adımda iki sunucudan geçerek bağlanır. Private key bastion'a hiç kopyalanmaz.",[10,532,534],{"id":533},"_6-port-yönlendirme-tünelleme","6. Port yönlendirme (tünelleme)",[536,537,539],"h3",{"id":538},"lokal-yönlendirme-l","Lokal yönlendirme (-L)",[15,541,542,543,546],{},"Uzak sunucudaki, dışarıya kapalı bir servise kendi makinenizden erişmek için. Örneğin sunucuda sadece ",[19,544,545],{},"localhost:5432","'de dinleyen PostgreSQL:",[32,548,550],{"className":34,"code":549,"language":36,"meta":37,"style":37},"ssh -N -L 5433:localhost:5432 prod\n# Artık lokalde: psql -h localhost -p 5433 -U app\n",[19,551,552,567],{"__ignoreMap":37},[41,553,554,556,559,562,565],{"class":43,"line":44},[41,555,456],{"class":47},[41,557,558],{"class":51}," -N",[41,560,561],{"class":51}," -L",[41,563,564],{"class":51}," 5433:localhost:5432",[41,566,264],{"class":51},[41,568,569],{"class":43,"line":71},[41,570,571],{"class":74},"# Artık lokalde: psql -h localhost -p 5433 -U app\n",[15,573,574,577,578,581],{},[19,575,576],{},"-N"," uzakta komut çalıştırmaz, sadece tüneli açık tutar. Arka plana almak için ",[19,579,580],{},"-f"," ekleyin.",[15,583,584],{},"Bastion üzerinden özel ağdaki başka bir sunucuya:",[32,586,588],{"className":34,"code":587,"language":36,"meta":37,"style":37},"ssh -N -L 6380:10.0.1.20:6379 bastion    # lokal 6380 → 10.0.1.20:6379 (Redis)\n",[19,589,590],{"__ignoreMap":37},[41,591,592,594,596,598,601,604],{"class":43,"line":44},[41,593,456],{"class":47},[41,595,558],{"class":51},[41,597,561],{"class":51},[41,599,600],{"class":51}," 6380:10.0.1.20:6379",[41,602,603],{"class":51}," bastion",[41,605,606],{"class":74},"    # lokal 6380 → 10.0.1.20:6379 (Redis)\n",[536,608,610],{"id":609},"uzak-yönlendirme-r","Uzak yönlendirme (-R)",[15,612,613],{},"Tersi: kendi makinenizdeki bir servisi uzak sunucu üzerinden erişilebilir yapar.",[32,615,617],{"className":34,"code":616,"language":36,"meta":37,"style":37},"ssh -N -R 8080:localhost:3000 prod\n# Sunucuda: curl localhost:8080 → sizin makinenizdeki :3000\n",[19,618,619,633],{"__ignoreMap":37},[41,620,621,623,625,628,631],{"class":43,"line":44},[41,622,456],{"class":47},[41,624,558],{"class":51},[41,626,627],{"class":51}," -R",[41,629,630],{"class":51}," 8080:localhost:3000",[41,632,264],{"class":51},[41,634,635],{"class":43,"line":71},[41,636,637],{"class":74},"# Sunucuda: curl localhost:8080 → sizin makinenizdeki :3000\n",[536,639,641],{"id":640},"dinamik-yönlendirme-d","Dinamik yönlendirme (-D)",[15,643,644],{},"Lokal bir SOCKS proxy açar; tarayıcı trafiğini sunucu üzerinden geçirmek için:",[32,646,648],{"className":34,"code":647,"language":36,"meta":37,"style":37},"ssh -N -D 1080 prod\ncurl --socks5-hostname localhost:1080 https:\u002F\u002Fifconfig.me\n",[19,649,650,663],{"__ignoreMap":37},[41,651,652,654,656,658,661],{"class":43,"line":44},[41,653,456],{"class":47},[41,655,558],{"class":51},[41,657,230],{"class":51},[41,659,660],{"class":272}," 1080",[41,662,264],{"class":51},[41,664,665,668,671,674],{"class":43,"line":71},[41,666,667],{"class":47},"curl",[41,669,670],{"class":51}," --socks5-hostname",[41,672,673],{"class":51}," localhost:1080",[41,675,676],{"class":51}," https:\u002F\u002Fifconfig.me\n",[678,679,680,696],"table",{},[681,682,683],"thead",{},[684,685,686,690,693],"tr",{},[687,688,689],"th",{},"Parametre",[687,691,692],{},"Yön",[687,694,695],{},"Tipik kullanım",[697,698,699,713,726],"tbody",{},[684,700,701,707,710],{},[702,703,704],"td",{},[19,705,706],{},"-L lokal:hedef:port",[702,708,709],{},"Lokal → uzak",[702,711,712],{},"Uzak DB'ye\u002Fadmin paneline erişim",[684,714,715,720,723],{},[702,716,717],{},[19,718,719],{},"-R uzak:hedef:port",[702,721,722],{},"Uzak → lokal",[702,724,725],{},"Lokal servisi geçici olarak dışarı açmak",[684,727,728,733,736],{},[702,729,730],{},[19,731,732],{},"-D port",[702,734,735],{},"SOCKS proxy",[702,737,738],{},"Tüm trafiği sunucu üzerinden çıkarmak",[10,740,742],{"id":741},"_7-dosya-kopyalama","7. Dosya kopyalama",[32,744,746],{"className":34,"code":745,"language":36,"meta":37,"style":37},"scp app.jar prod:\u002Fopt\u002Fapp\u002F\nscp -r prod:\u002Fvar\u002Flog\u002Fmyapp .\u002Flogs\nrsync -avz --progress dist\u002F prod:\u002Fvar\u002Fwww\u002Fapp\u002F\nrsync -avz --delete -e \"ssh -p 2222\" dist\u002F deploy@203.0.113.10:\u002Fvar\u002Fwww\u002Fapp\u002F\nsftp prod\n",[19,747,748,759,772,789,814],{"__ignoreMap":37},[41,749,750,753,756],{"class":43,"line":44},[41,751,752],{"class":47},"scp",[41,754,755],{"class":51}," app.jar",[41,757,758],{"class":51}," prod:\u002Fopt\u002Fapp\u002F\n",[41,760,761,763,766,769],{"class":43,"line":71},[41,762,752],{"class":47},[41,764,765],{"class":51}," -r",[41,767,768],{"class":51}," prod:\u002Fvar\u002Flog\u002Fmyapp",[41,770,771],{"class":51}," .\u002Flogs\n",[41,773,774,777,780,783,786],{"class":43,"line":78},[41,775,776],{"class":47},"rsync",[41,778,779],{"class":51}," -avz",[41,781,782],{"class":51}," --progress",[41,784,785],{"class":51}," dist\u002F",[41,787,788],{"class":51}," prod:\u002Fvar\u002Fwww\u002Fapp\u002F\n",[41,790,791,793,795,798,801,803,806,809,811],{"class":43,"line":225},[41,792,776],{"class":47},[41,794,779],{"class":51},[41,796,797],{"class":51}," --delete",[41,799,800],{"class":51}," -e",[41,802,62],{"class":61},[41,804,805],{"class":51},"ssh -p 2222",[41,807,808],{"class":61},"\"",[41,810,785],{"class":51},[41,812,813],{"class":51}," deploy@203.0.113.10:\u002Fvar\u002Fwww\u002Fapp\u002F\n",[41,815,816,819],{"class":43,"line":284},[41,817,818],{"class":47},"sftp",[41,820,264],{"class":51},[15,822,823,824,826],{},"Büyük ya da tekrarlanan transferlerde ",[19,825,776],{}," tercih edin: sadece değişen dosyaları gönderir ve yarıda kalan aktarımı sürdürebilir.",[10,828,830],{"id":829},"_8-sunucu-tarafı-güvenlik","8. Sunucu tarafı güvenlik",[15,832,833,834,837,838,841],{},"Anahtar girişinin çalıştığını doğruladıktan ",[432,835,836],{},"sonra"," ",[19,839,840],{},"\u002Fetc\u002Fssh\u002Fsshd_config"," dosyasında:",[32,843,845],{"className":34,"code":844,"language":36,"meta":37,"style":37},"PasswordAuthentication no\nPermitRootLogin no\nPubkeyAuthentication yes\nMaxAuthTries 3\n",[19,846,847,855,862,869],{"__ignoreMap":37},[41,848,849,852],{"class":43,"line":44},[41,850,851],{"class":47},"PasswordAuthentication",[41,853,854],{"class":51}," no\n",[41,856,857,860],{"class":43,"line":71},[41,858,859],{"class":47},"PermitRootLogin",[41,861,854],{"class":51},[41,863,864,867],{"class":43,"line":78},[41,865,866],{"class":47},"PubkeyAuthentication",[41,868,307],{"class":51},[41,870,871,874],{"class":43,"line":225},[41,872,873],{"class":47},"MaxAuthTries",[41,875,389],{"class":272},[32,877,879],{"className":34,"code":878,"language":36,"meta":37,"style":37},"sudo sshd -t                       # yapılandırmayı test et\nsudo systemctl reload sshd         # Ubuntu'da servis adı: ssh\n",[19,880,881,894],{"__ignoreMap":37},[41,882,883,886,889,891],{"class":43,"line":44},[41,884,885],{"class":47},"sudo",[41,887,888],{"class":51}," sshd",[41,890,52],{"class":51},[41,892,893],{"class":74},"                       # yapılandırmayı test et\n",[41,895,896,898,901,904,906],{"class":43,"line":71},[41,897,885],{"class":47},[41,899,900],{"class":51}," systemctl",[41,902,903],{"class":51}," reload",[41,905,888],{"class":51},[41,907,908],{"class":74},"         # Ubuntu'da servis adı: ssh\n",[910,911,912],"blockquote",{},[15,913,914],{},"Değişikliği uygularken mevcut SSH oturumunu kapatmayın. Yeni bir terminalden bağlanabildiğinizi doğrulayana kadar açık tutun; aksi halde sunucuya erişimi kaybedebilirsiniz.",[15,916,917,918,921],{},"Brute-force denemelerini azaltmak için ",[19,919,920],{},"fail2ban"," kurmak da iyi bir ek önlemdir.",[10,923,925],{"id":924},"_9-sorun-giderme","9. Sorun giderme",[678,927,928,938],{},[681,929,930],{},[684,931,932,935],{},[687,933,934],{},"Hata",[687,936,937],{},"Sebep \u002F Çözüm",[697,939,940,958,973,985,1002,1016,1026],{},[684,941,942,947],{},[702,943,944],{},[19,945,946],{},"Permission denied (publickey)",[702,948,949,950,953,954,957],{},"Public key ",[19,951,952],{},"authorized_keys","'te yok ya da yanlış kullanıcı; ",[19,955,956],{},"ssh -v"," ile hangi anahtarın denendiğine bakın",[684,959,960,963],{},[702,961,962],{},"Anahtar var ama yine şifre soruyor",[702,964,965,966,969,970,972],{},"İzinler yanlış: ",[19,967,968],{},"~\u002F.ssh"," 700, ",[19,971,952],{}," 600 olmalı, home dizini başkalarınca yazılabilir olmamalı",[684,974,975,980],{},[702,976,977],{},[19,978,979],{},"UNPROTECTED PRIVATE KEY FILE",[702,981,982],{},[19,983,984],{},"chmod 600 ~\u002F.ssh\u002Fid_ed25519",[684,986,987,992],{},[702,988,989],{},[19,990,991],{},"Too many authentication failures",[702,993,994,995,997,998,1001],{},"Config'e ",[19,996,420],{}," ve doğru ",[19,999,1000],{},"IdentityFile"," ekleyin",[684,1003,1004,1009],{},[702,1005,1006],{},[19,1007,1008],{},"REMOTE HOST IDENTIFICATION HAS CHANGED",[702,1010,1011,1012,1015],{},"Sunucu yeniden kurulduysa ",[19,1013,1014],{},"ssh-keygen -R 203.0.113.10","; değilse dikkat, MITM olabilir",[684,1017,1018,1021],{},[702,1019,1020],{},"Bağlantı boşta kopuyor",[702,1022,1023],{},[19,1024,1025],{},"ServerAliveInterval 60",[684,1027,1028,1034],{},[702,1029,1030,1033],{},[19,1031,1032],{},"bind: Address already in use"," (tünel)",[702,1035,1036],{},"Lokal port dolu; farklı bir port seçin",[15,1038,1039,1040,1043,1044,1047],{},"Her türlü bağlantı sorununda ilk adım ayrıntılı çıktıdır: ",[19,1041,1042],{},"ssh -v prod"," (daha fazlası için ",[19,1045,1046],{},"-vvv",").",[10,1049,1051],{"id":1050},"sonuç","Sonuç",[15,1053,1054,1055,407,1058,1061],{},"Bir ed25519 anahtar, iyi düzenlenmiş bir ",[19,1056,1057],{},"~\u002F.ssh\u002Fconfig",[19,1059,1060],{},"-L"," ile açılan tüneller, SSH'ı sadece \"sunucuya bağlanma aracı\" olmaktan çıkarıp günlük işin merkezine taşır. Sunucu tarafında ise şifreli girişi ve root girişini kapatmak, alınabilecek en etkili iki güvenlik önlemidir.",[1063,1064,1065],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":37,"searchDepth":71,"depth":71,"links":1067},[1068,1069,1070,1071,1072,1073,1074,1079,1080,1081,1082],{"id":12,"depth":71,"text":13},{"id":29,"depth":71,"text":30},{"id":115,"depth":71,"text":116},{"id":178,"depth":71,"text":179},{"id":242,"depth":71,"text":243},{"id":442,"depth":71,"text":443},{"id":533,"depth":71,"text":534,"children":1075},[1076,1077,1078],{"id":538,"depth":78,"text":539},{"id":609,"depth":78,"text":610},{"id":640,"depth":78,"text":641},{"id":741,"depth":71,"text":742},{"id":829,"depth":71,"text":830},{"id":924,"depth":71,"text":925},{"id":1050,"depth":71,"text":1051},"2026-10-31","ed25519 anahtar üretmek, ssh-agent, ~\u002F.ssh\u002Fconfig ile kısayollar, jump host, port yönlendirme (-L, -R, -D) ve sunucu tarafı güvenlik ayarları.","md",{},"\u002Ftr\u002Fblog\u002Fssh-config-and-tunneling",{"title":5,"description":1084},"tr\u002Fblog\u002Fssh-config-and-tunneling",[456,1091,1092,1093],"linux","güvenlik","rehber","\u002Fen\u002Fblog\u002Fssh-config-and-tunneling","theD1zQgzKXYXIVGl2RtgmzkZO_uNT--vUYPLO1Mvi4",[1097,1105,1112],{"path":1098,"title":1099,"description":1100,"date":1101,"tags":1102},"\u002Ftr\u002Fblog\u002Fsystemd-service-guide","systemd ile Linux Servisi Yazmak","Bir uygulamayı systemd servisi olarak çalıştırmak — unit dosyası, restart politikası, ortam değişkenleri, journalctl ile log okuma ve timer ile zamanlanmış görevler.","2026-10-30",[1091,1103,1104,1093],"systemd","devops",{"path":1106,"title":1107,"description":1108,"date":1109,"tags":1110},"\u002Ftr\u002Fblog\u002Fnginx-reverse-proxy-ssl","Nginx Reverse Proxy ve Let's Encrypt SSL Kurulumu","Bir Node.js ya da Spring Boot uygulamasını Nginx arkasına almak, Certbot ile ücretsiz SSL sertifikası almak ve otomatik yenilemeyi kurmak.","2026-10-28",[1111,1091,1104,1093],"nginx",{"path":1113,"title":1114,"description":1115,"date":1116,"tags":1117},"\u002Ftr\u002Fblog\u002Flinux-best-practices","Linux Best Practices","Linux'ta sık kullanılan sistem komutları ve iyi pratikler: CPU, bellek, disk, kullanıcı ve port yönetimi.","2022-10-31",[1091],1793407399973]