[{"data":1,"prerenderedAt":1132},["ShallowReactive",2],{"doc:\u002Fssh":3},{"id":4,"title":5,"body":6,"description":1126,"extension":1127,"meta":1128,"navigation":572,"path":1129,"seo":1130,"stem":416,"__hash__":1131},"docs\u002Fssh.md","SSH",{"type":7,"value":8,"toc":1107},"minimark",[9,14,23,28,39,42,87,94,98,128,162,173,176,182,186,189,227,314,318,321,368,379,383,388,401,407,419,423,463,466,481,484,490,493,500,503,509,524,530,533,604,607,636,646,650,695,706,710,749,755,775,790,794,811,818,837,851,855,929,933,963,1086,1094,1097,1103],[10,11,13],"h1",{"id":12},"ssh-sin-miedo","SSH sin miedo",[15,16,17,18,22],"p",{},"SSH (",[19,20,21],"strong",{},"Secure Shell",") es un túnel cifrado entre tu máquina y otra. Sirve para\nentrar a un servidor, subir archivos, autenticarte contra GitHub y redirigir\npuertos. Casi todo lo que haces en remoto pasa por aquí.",[24,25,27],"h2",{"id":26},"qué-pasa-cuando-te-conectas","Qué pasa cuando te conectas",[29,30,35],"pre",{"className":31,"code":33,"language":34},[32],"language-text","tu máquina                                  servidor\n┌──────────────┐                          ┌──────────────┐\n│ clave privada│  ── canal cifrado ──►    │ clave pública│\n└──────────────┘                          └──────────────┘\n","text",[36,37,33],"code",{"__ignoreMap":38},"",[15,40,41],{},"Dos verificaciones distintas, que conviene no mezclar:",[43,44,45,61],"table",{},[46,47,48],"thead",{},[49,50,51,55,58],"tr",{},[52,53,54],"th",{},"Pregunta",[52,56,57],{},"Quién la responde",[52,59,60],{},"Con qué",[62,63,64,76],"tbody",{},[49,65,66,70,73],{},[67,68,69],"td",{},"¿El servidor es de verdad?",[67,71,72],{},"tu cliente",[67,74,75],{},"host key del servidor",[49,77,78,81,84],{},[67,79,80],{},"¿Yo soy quien digo ser?",[67,82,83],{},"el servidor",[67,85,86],{},"tu clave pública",[15,88,89,90,93],{},"El detalle clave: ",[19,91,92],{},"tu clave privada nunca viaja",". El servidor manda un\ndesafío, tu cliente lo firma con la privada, y el servidor verifica la firma con\nla pública. Si alguien intercepta la conexión, no puede reusar nada.",[24,95,97],{"id":96},"generar-un-par-de-claves","Generar un par de claves",[29,99,103],{"className":100,"code":101,"language":102,"meta":38,"style":38},"language-sh shiki shiki-themes github-light github-dark","ssh-keygen -t ed25519 -C \"tu@email.com\"\n","sh",[36,104,105],{"__ignoreMap":38},[106,107,110,114,118,122,125],"span",{"class":108,"line":109},"line",1,[106,111,113],{"class":112},"sScJk","ssh-keygen",[106,115,117],{"class":116},"sj4cs"," -t",[106,119,121],{"class":120},"sZZnC"," ed25519",[106,123,124],{"class":116}," -C",[106,126,127],{"class":120}," \"tu@email.com\"\n",[43,129,130,140],{},[46,131,132],{},[49,133,134,137],{},[52,135,136],{},"Parte",[52,138,139],{},"Significado",[62,141,142,152],{},[49,143,144,149],{},[67,145,146],{},[36,147,148],{},"-t ed25519",[67,150,151],{},"tipo de clave: moderna, corta y segura",[49,153,154,159],{},[67,155,156],{},[36,157,158],{},"-C",[67,160,161],{},"comentario, normalmente el email (para identificarla)",[15,163,164,165,168,169,172],{},"Te va a preguntar dónde guardarla (Enter = ",[36,166,167],{},"~\u002F.ssh\u002Fid_ed25519",") y una\n",[19,170,171],{},"passphrase",". Ponla: si te roban el archivo, sin passphrase tienen tu\nidentidad.",[15,174,175],{},"Genera dos archivos:",[29,177,180],{"className":178,"code":179,"language":34},[32],"~\u002F.ssh\u002Fid_ed25519       ← privada. NUNCA se comparte.\n~\u002F.ssh\u002Fid_ed25519.pub   ← pública. Se copia a servidores y a GitHub.\n",[36,181,179],{"__ignoreMap":38},[24,183,185],{"id":184},"permisos-el-90-de-los-problemas","Permisos: el 90 % de los problemas",[15,187,188],{},"SSH es estricto a propósito: si las claves son legibles por otros usuarios, se\nniega a usarlas.",[29,190,192],{"className":100,"code":191,"language":102,"meta":38,"style":38},"chmod 700 ~\u002F.ssh\nchmod 600 ~\u002F.ssh\u002Fid_ed25519\nchmod 644 ~\u002F.ssh\u002Fid_ed25519.pub\n",[36,193,194,205,216],{"__ignoreMap":38},[106,195,196,199,202],{"class":108,"line":109},[106,197,198],{"class":112},"chmod",[106,200,201],{"class":116}," 700",[106,203,204],{"class":120}," ~\u002F.ssh\n",[106,206,208,210,213],{"class":108,"line":207},2,[106,209,198],{"class":112},[106,211,212],{"class":116}," 600",[106,214,215],{"class":120}," ~\u002F.ssh\u002Fid_ed25519\n",[106,217,219,221,224],{"class":108,"line":218},3,[106,220,198],{"class":112},[106,222,223],{"class":116}," 644",[106,225,226],{"class":120}," ~\u002F.ssh\u002Fid_ed25519.pub\n",[43,228,229,242],{},[46,230,231],{},[49,232,233,236,239],{},[52,234,235],{},"Archivo",[52,237,238],{},"Permiso",[52,240,241],{},"Por qué",[62,243,244,259,272,285,299],{},[49,245,246,251,256],{},[67,247,248],{},[36,249,250],{},"~\u002F.ssh",[67,252,253],{},[36,254,255],{},"700",[67,257,258],{},"solo tú entras",[49,260,261,264,269],{},[67,262,263],{},"clave privada",[67,265,266],{},[36,267,268],{},"600",[67,270,271],{},"solo tú lees",[49,273,274,277,282],{},[67,275,276],{},"clave pública",[67,278,279],{},[36,280,281],{},"644",[67,283,284],{},"se puede compartir",[49,286,287,292,296],{},[67,288,289],{},[36,290,291],{},"~\u002F.ssh\u002Fconfig",[67,293,294],{},[36,295,268],{},[67,297,298],{},"puede tener rutas privadas",[49,300,301,307,311],{},[67,302,303,306],{},[36,304,305],{},"~\u002F.ssh\u002Fauthorized_keys"," (servidor)",[67,308,309],{},[36,310,268],{},[67,312,313],{},"mismas razones",[24,315,317],{"id":316},"el-agente-ssh","El agente SSH",[15,319,320],{},"Si tu clave tiene passphrase, el agente la mantiene desbloqueada durante la\nsesión para no escribirla en cada operación.",[29,322,324],{"className":100,"code":323,"language":102,"meta":38,"style":38},"eval \"$(ssh-agent -s)\"     # arranca el agente\nssh-add ~\u002F.ssh\u002Fid_ed25519  # carga la clave (pide la passphrase una vez)\nssh-add -l                 # lista lo cargado\n",[36,325,326,347,358],{"__ignoreMap":38},[106,327,328,331,334,337,340,343],{"class":108,"line":109},[106,329,330],{"class":116},"eval",[106,332,333],{"class":120}," \"$(",[106,335,336],{"class":112},"ssh-agent",[106,338,339],{"class":116}," -s",[106,341,342],{"class":120},")\"",[106,344,346],{"class":345},"sJ8bj","     # arranca el agente\n",[106,348,349,352,355],{"class":108,"line":207},[106,350,351],{"class":112},"ssh-add",[106,353,354],{"class":120}," ~\u002F.ssh\u002Fid_ed25519",[106,356,357],{"class":345},"  # carga la clave (pide la passphrase una vez)\n",[106,359,360,362,365],{"class":108,"line":218},[106,361,351],{"class":112},[106,363,364],{"class":116}," -l",[106,366,367],{"class":345},"                 # lista lo cargado\n",[15,369,370,371,374,375,378],{},"En macOS suele integrarse con el llavero; en Linux, agrega las dos líneas al\n",[36,372,373],{},"~\u002F.bashrc"," o ",[36,376,377],{},"~\u002F.zshrc"," para que arranque solo.",[24,380,382],{"id":381},"autorizar-la-clave","Autorizar la clave",[384,385,387],"h3",{"id":386},"en-un-servidor","En un servidor",[29,389,391],{"className":100,"code":390,"language":102,"meta":38,"style":38},"ssh-copy-id usuario@servidor\n",[36,392,393],{"__ignoreMap":38},[106,394,395,398],{"class":108,"line":109},[106,396,397],{"class":112},"ssh-copy-id",[106,399,400],{"class":120}," usuario@servidor\n",[15,402,403,404,406],{},"Eso agrega tu clave pública a ",[36,405,305],{}," del servidor. Después:",[29,408,410],{"className":100,"code":409,"language":102,"meta":38,"style":38},"ssh usuario@servidor\n",[36,411,412],{"__ignoreMap":38},[106,413,414,417],{"class":108,"line":109},[106,415,416],{"class":112},"ssh",[106,418,400],{"class":120},[384,420,422],{"id":421},"en-github","En GitHub",[424,425,426,446,460],"ol",{},[427,428,429,430,433,434],"li",{},"Copia el contenido de la clave ",[19,431,432],{},"pública",":",[29,435,437],{"className":100,"code":436,"language":102,"meta":38,"style":38},"cat ~\u002F.ssh\u002Fid_ed25519.pub\n",[36,438,439],{"__ignoreMap":38},[106,440,441,444],{"class":108,"line":109},[106,442,443],{"class":112},"cat",[106,445,226],{"class":120},[427,447,448,449,452,453,452,456,459],{},"GitHub → ",[19,450,451],{},"Settings"," → ",[19,454,455],{},"SSH and GPG keys",[19,457,458],{},"New SSH key",".",[427,461,462],{},"Pega la línea completa y guarda.",[15,464,465],{},"Prueba:",[29,467,469],{"className":100,"code":468,"language":102,"meta":38,"style":38},"ssh -T git@github.com\n",[36,470,471],{"__ignoreMap":38},[106,472,473,475,478],{"class":108,"line":109},[106,474,416],{"class":112},[106,476,477],{"class":116}," -T",[106,479,480],{"class":120}," git@github.com\n",[15,482,483],{},"La respuesta esperada es algo como:",[29,485,488],{"className":486,"code":487,"language":34},[32],"Hi usuario! You've successfully authenticated, but GitHub does not provide shell access.\n",[36,489,487],{"__ignoreMap":38},[15,491,492],{},"Ese \"no shell access\" es normal: GitHub no te da una terminal, solo usa el túnel\npara autenticar.",[24,494,496,497],{"id":495},"la-primera-conexión-known_hosts","La primera conexión: ",[36,498,499],{},"known_hosts",[15,501,502],{},"La primera vez que te conectas a un host, SSH te muestra su huella:",[29,504,507],{"className":505,"code":506,"language":34},[32],"The authenticity of host 'ejemplo.com' can't be established.\nED25519 key fingerprint is SHA256:...\nAre you sure you want to continue connecting (yes\u002Fno)?\n",[36,508,506],{"__ignoreMap":38},[15,510,511,512,515,516,519,520,523],{},"Si escribes ",[36,513,514],{},"yes",", guarda la huella en ",[36,517,518],{},"~\u002F.ssh\u002Fknown_hosts",". En las siguientes\nconexiones compara: si cambia, ",[19,521,522],{},"corta"," con un warning enorme. Puede ser que\nreinstalaron el servidor… o que hay un ataque. Verificá la huella por un canal\nconfiable antes de borrar la entrada.",[24,525,527,528],{"id":526},"el-archivo-sshconfig","El archivo ",[36,529,291],{},[15,531,532],{},"Aquí está la diferencia entre \"uso SSH\" y \"uso SSH cómodo\". Sirve para poner\nalias, usuarios, puertos y claves por host.",[29,534,538],{"className":535,"code":536,"language":537,"meta":38,"style":38},"language-sshconfig shiki shiki-themes github-light github-dark","Host gh\n    HostName github.com\n    User git\n    IdentityFile ~\u002F.ssh\u002Fid_ed25519_github\n    IdentitiesOnly yes\n\nHost vps\n    HostName 203.0.113.10\n    User laura\n    Port 2222\n    IdentityFile ~\u002F.ssh\u002Fid_ed25519\n","sshconfig",[36,539,540,545,550,555,561,567,574,580,586,592,598],{"__ignoreMap":38},[106,541,542],{"class":108,"line":109},[106,543,544],{},"Host gh\n",[106,546,547],{"class":108,"line":207},[106,548,549],{},"    HostName github.com\n",[106,551,552],{"class":108,"line":218},[106,553,554],{},"    User git\n",[106,556,558],{"class":108,"line":557},4,[106,559,560],{},"    IdentityFile ~\u002F.ssh\u002Fid_ed25519_github\n",[106,562,564],{"class":108,"line":563},5,[106,565,566],{},"    IdentitiesOnly yes\n",[106,568,570],{"class":108,"line":569},6,[106,571,573],{"emptyLinePlaceholder":572},true,"\n",[106,575,577],{"class":108,"line":576},7,[106,578,579],{},"Host vps\n",[106,581,583],{"class":108,"line":582},8,[106,584,585],{},"    HostName 203.0.113.10\n",[106,587,589],{"class":108,"line":588},9,[106,590,591],{},"    User laura\n",[106,593,595],{"class":108,"line":594},10,[106,596,597],{},"    Port 2222\n",[106,599,601],{"class":108,"line":600},11,[106,602,603],{},"    IdentityFile ~\u002F.ssh\u002Fid_ed25519\n",[15,605,606],{},"Con eso:",[29,608,610],{"className":100,"code":609,"language":102,"meta":38,"style":38},"ssh vps                       # en lugar de ssh -p 2222 laura@203.0.113.10\ngit clone gh:usuario\u002Frepo.git # en lugar de git@github.com:usuario\u002Frepo.git\n",[36,611,612,622],{"__ignoreMap":38},[106,613,614,616,619],{"class":108,"line":109},[106,615,416],{"class":112},[106,617,618],{"class":120}," vps",[106,620,621],{"class":345},"                       # en lugar de ssh -p 2222 laura@203.0.113.10\n",[106,623,624,627,630,633],{"class":108,"line":207},[106,625,626],{"class":112},"git",[106,628,629],{"class":120}," clone",[106,631,632],{"class":120}," gh:usuario\u002Frepo.git",[106,634,635],{"class":345}," # en lugar de git@github.com:usuario\u002Frepo.git\n",[15,637,638,641,642,645],{},[36,639,640],{},"IdentitiesOnly yes"," evita el clásico ",[36,643,644],{},"Too many authentication failures",": le dice\na SSH que use solo la clave indicada y no pruebe todas las que tenga el agente.",[24,647,649],{"id":648},"cambiar-un-repo-de-https-a-ssh","Cambiar un repo de HTTPS a SSH",[29,651,653],{"className":100,"code":652,"language":102,"meta":38,"style":38},"git remote -v\ngit remote set-url origin git@github.com:usuario\u002Frepo.git\nssh -T git@github.com\ngit fetch\n",[36,654,655,665,680,688],{"__ignoreMap":38},[106,656,657,659,662],{"class":108,"line":109},[106,658,626],{"class":112},[106,660,661],{"class":120}," remote",[106,663,664],{"class":116}," -v\n",[106,666,667,669,671,674,677],{"class":108,"line":207},[106,668,626],{"class":112},[106,670,661],{"class":120},[106,672,673],{"class":120}," set-url",[106,675,676],{"class":120}," origin",[106,678,679],{"class":120}," git@github.com:usuario\u002Frepo.git\n",[106,681,682,684,686],{"class":108,"line":218},[106,683,416],{"class":112},[106,685,477],{"class":116},[106,687,480],{"class":120},[106,689,690,692],{"class":108,"line":557},[106,691,626],{"class":112},[106,693,694],{"class":120}," fetch\n",[15,696,697,698,701,702,705],{},"Las URL ",[36,699,700],{},"git@github.com:..."," usan SSH; las ",[36,703,704],{},"https:\u002F\u002F..."," usan usuario y token.\nNo son intercambiables: si copiaste una y tu clave está configurada para la\notra, no va a autenticar.",[24,707,709],{"id":708},"copiar-archivos","Copiar archivos",[29,711,713],{"className":100,"code":712,"language":102,"meta":38,"style":38},"scp archivo.txt usuario@servidor:\u002Fruta\u002Fdestino\nscp -r carpeta usuario@servidor:\u002Fruta\u002F\nscp usuario@servidor:\u002Fruta\u002Farchivo.txt .\n",[36,714,715,726,739],{"__ignoreMap":38},[106,716,717,720,723],{"class":108,"line":109},[106,718,719],{"class":112},"scp",[106,721,722],{"class":120}," archivo.txt",[106,724,725],{"class":120}," usuario@servidor:\u002Fruta\u002Fdestino\n",[106,727,728,730,733,736],{"class":108,"line":207},[106,729,719],{"class":112},[106,731,732],{"class":116}," -r",[106,734,735],{"class":120}," carpeta",[106,737,738],{"class":120}," usuario@servidor:\u002Fruta\u002F\n",[106,740,741,743,746],{"class":108,"line":218},[106,742,719],{"class":112},[106,744,745],{"class":120}," usuario@servidor:\u002Fruta\u002Farchivo.txt",[106,747,748],{"class":120}," .\n",[15,750,751,754],{},[36,752,753],{},"rsync"," es mejor para carpetas grandes: copia solo lo que cambió y se puede\nreanudar.",[29,756,758],{"className":100,"code":757,"language":102,"meta":38,"style":38},"rsync -avz --progress carpeta\u002F usuario@servidor:\u002Fruta\u002F\n",[36,759,760],{"__ignoreMap":38},[106,761,762,764,767,770,773],{"class":108,"line":109},[106,763,753],{"class":112},[106,765,766],{"class":116}," -avz",[106,768,769],{"class":116}," --progress",[106,771,772],{"class":120}," carpeta\u002F",[106,774,738],{"class":120},[15,776,777,778,781,782,785,786,789],{},"El ",[36,779,780],{},"\u002F"," final en ",[36,783,784],{},"carpeta\u002F"," importa: copia el ",[19,787,788],{},"contenido",", no la carpeta.",[24,791,793],{"id":792},"túneles-traer-un-puerto-remoto-a-tu-máquina","Túneles: traer un puerto remoto a tu máquina",[29,795,797],{"className":100,"code":796,"language":102,"meta":38,"style":38},"ssh -L 8080:localhost:80 usuario@servidor\n",[36,798,799],{"__ignoreMap":38},[106,800,801,803,806,809],{"class":108,"line":109},[106,802,416],{"class":112},[106,804,805],{"class":116}," -L",[106,807,808],{"class":120}," 8080:localhost:80",[106,810,400],{"class":120},[15,812,813,814,817],{},"Ahora ",[36,815,816],{},"http:\u002F\u002Flocalhost:8080"," en tu máquina llega al puerto 80 del servidor.\nMuy útil para ver un servicio que solo escucha en la red interna.",[29,819,821],{"className":100,"code":820,"language":102,"meta":38,"style":38},"ssh -N -L 5433:localhost:5432 usuario@servidor\n",[36,822,823],{"__ignoreMap":38},[106,824,825,827,830,832,835],{"class":108,"line":109},[106,826,416],{"class":112},[106,828,829],{"class":116}," -N",[106,831,805],{"class":116},[106,833,834],{"class":120}," 5433:localhost:5432",[106,836,400],{"class":120},[15,838,839,842,843,846,847,850],{},[36,840,841],{},"-N"," = no ejecutes comandos, solo el túnel (queda en primer plano; ",[36,844,845],{},"Ctrl+C"," para\ncortar). Al revés, ",[36,848,849],{},"-R",", expone un puerto tuyo en el servidor.",[24,852,854],{"id":853},"reglas-de-seguridad","Reglas de seguridad",[43,856,857,867],{},[46,858,859],{},[49,860,861,864],{},[52,862,863],{},"Regla",[52,865,866],{},"Motivo",[62,868,869,877,885,893,903,913,921],{},[49,870,871,874],{},[67,872,873],{},"La privada nunca sale de tu máquina",[67,875,876],{},"con ella, eres tú",[49,878,879,882],{},[67,880,881],{},"Passphrase siempre",[67,883,884],{},"un archivo robado sin passphrase es acceso total",[49,886,887,890],{},[67,888,889],{},"Una clave por propósito (personal, trabajo, GitHub)",[67,891,892],{},"si se filtra una, revocas solo esa",[49,894,895,900],{},[67,896,897,899],{},[36,898,268],{}," en las claves",[67,901,902],{},"SSH no las usa si son públicas",[49,904,905,910],{},[67,906,907,908],{},"Nunca commitear ",[36,909,250],{},[67,911,912],{},"se filtra en el repo y en el historial",[49,914,915,918],{},[67,916,917],{},"Rotar si se filtró",[67,919,920],{},"borrarla del repo no alcanza: ya está en la historia",[49,922,923,926],{},[67,924,925],{},"Verificar huellas la primera vez",[67,927,928],{},"evita un ataque de intermediario",[24,930,932],{"id":931},"diagnóstico","Diagnóstico",[29,934,936],{"className":100,"code":935,"language":102,"meta":38,"style":38},"ssh -v usuario@servidor     # un nivel de detalle\nssh -vvv usuario@servidor   # tres niveles: qué clave probó y por qué falló\n",[36,937,938,951],{"__ignoreMap":38},[106,939,940,942,945,948],{"class":108,"line":109},[106,941,416],{"class":112},[106,943,944],{"class":116}," -v",[106,946,947],{"class":120}," usuario@servidor",[106,949,950],{"class":345},"     # un nivel de detalle\n",[106,952,953,955,958,960],{"class":108,"line":207},[106,954,416],{"class":112},[106,956,957],{"class":116}," -vvv",[106,959,947],{"class":120},[106,961,962],{"class":345},"   # tres niveles: qué clave probó y por qué falló\n",[43,964,965,978],{},[46,966,967],{},[49,968,969,972,975],{},[52,970,971],{},"Mensaje",[52,973,974],{},"Causa",[52,976,977],{},"Solución",[62,979,980,998,1017,1031,1044,1057,1070],{},[49,981,982,987,990],{},[67,983,984],{},[36,985,986],{},"Permission denied (publickey)",[67,988,989],{},"la clave no está autorizada o no se ofrece",[67,991,992,994,995],{},[36,993,351],{},", revisar ",[36,996,997],{},"authorized_keys",[49,999,1000,1005,1008],{},[67,1001,1002],{},[36,1003,1004],{},"Bad permissions",[67,1006,1007],{},"permisos abiertos",[67,1009,1010,1013,1014],{},[36,1011,1012],{},"chmod 600"," \u002F ",[36,1015,1016],{},"chmod 700",[49,1018,1019,1023,1026],{},[67,1020,1021],{},[36,1022,644],{},[67,1024,1025],{},"el agente prueba demasiadas claves",[67,1027,1028,1030],{},[36,1029,640],{}," en el config",[49,1032,1033,1038,1041],{},[67,1034,1035],{},[36,1036,1037],{},"Connection refused",[67,1039,1040],{},"SSH no escucha en ese puerto",[67,1042,1043],{},"revisar el servidor y el puerto",[49,1045,1046,1051,1054],{},[67,1047,1048],{},[36,1049,1050],{},"Connection timed out",[67,1052,1053],{},"red o firewall",[67,1055,1056],{},"probar otro puerto\u002Fred",[49,1058,1059,1064,1067],{},[67,1060,1061],{},[36,1062,1063],{},"Host key verification failed",[67,1065,1066],{},"la huella cambió",[67,1068,1069],{},"verificar y, si corresponde, borrar la entrada",[49,1071,1072,1077,1080],{},[67,1073,1074],{},[36,1075,1076],{},"Could not resolve hostname",[67,1078,1079],{},"nombre mal escrito o DNS",[67,1081,1082,1083],{},"revisar ",[36,1084,1085],{},"HostName",[15,1087,1088,1089,459],{},"Siguiente parada: ",[1090,1091,1093],"a",{"href":1092},"\u002Fshells","Bash, Zsh y Fish",[1095,1096],"hr",{},[15,1098,1099],{},[1100,1101,1102],"em",{},"Hecho con amor para Laura, por Bogdan.",[1104,1105,1106],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":38,"searchDepth":207,"depth":207,"links":1108},[1109,1110,1111,1112,1113,1117,1119,1121,1122,1123,1124,1125],{"id":26,"depth":207,"text":27},{"id":96,"depth":207,"text":97},{"id":184,"depth":207,"text":185},{"id":316,"depth":207,"text":317},{"id":381,"depth":207,"text":382,"children":1114},[1115,1116],{"id":386,"depth":218,"text":387},{"id":421,"depth":218,"text":422},{"id":495,"depth":207,"text":1118},"La primera conexión: known_hosts",{"id":526,"depth":207,"text":1120},"El archivo ~\u002F.ssh\u002Fconfig",{"id":648,"depth":207,"text":649},{"id":708,"depth":207,"text":709},{"id":792,"depth":207,"text":793},{"id":853,"depth":207,"text":854},{"id":931,"depth":207,"text":932},"Claves, agente, config, GitHub, copiar archivos y túneles.","md",{},"\u002Fssh",{"title":5,"description":1126},"MCu2mKdOh0qKFrVDVEOU806QXr3P8ylEm_nnUD1yVx8",1793539815760]