ssh ilmselt tutvustamist ei vaja. Siiski, kas oleme teadlikud selle võimalustest?
Debiani-laadsete Linuxi distributsioonide puhul piisab installeerimiseks käsklusest:
sudo apt-get install ssh
Pärast seda saame turvaliselt sisse logida kasutades kasutajanime ja parooli:
ssh user@host
Mugavam on tegelikult sisse logida kasutades avaliku ja privaatvõtme paari. Privaatvõtit hoiame oma kliendiarvutis ja erinevatesse serveritesse võime lasta paigutada oma avaliku võtme.
Kui võtmepaar veel puudub, saab selle genereerida käsklusega:
ssh-keygen -t rsa
Seepeale tekivad kausta ~/.ssh failid id_rsa.pub ja id_rsa.
id_rsa.pub ongi meie avalik võti, mida võib panna serveritesse.
Kui meil õnnestub juba kasutajanime ja parooliga sisselogimine, saame selle lisada nii:
cat ~/.ssh/id_rsa.pub | ssh user@host "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
Kui proovida nüüd sisselogimist "ssh user@host", siis nüüd enam parooli ei küsita vaid kasutatakse paikaseatud võtmeid.
Virtuaalserverite pakkujad lubavad ka enamasti ssh ligipääsu, kui lisada veebiliidese kaudu oma avalik võti:
Failide kopeerimiseks saab kasutada linuxi käsureal scp, Windowsi kasutajatele on abiks WinSCP.
Tegelikult võib ssh ressursi ka oma masina külge haakida ja töötada niimoodi failidega nagu oma masinas.
Näiteks proovime külge haakida zone virtuaalserveri:
sudo apt-get install sshfs mkdir -p ~/zonesshfs sshfs virtxxxxx@www.infokiir.ee:/data05/virtxxxxx/domeenid/www.infokiir.ee ~/zonesshfs
Kui millegipärast meil see ei õnnestu, siis vea leidmiseks võib abi olla võtmetest "-odebug,sshfs_debug,loglevel=debug":
sshfs -odebug,sshfs_debug,loglevel=debug virtxxxxx@www.infokiir.ee:/data05/virtxxxxx/domeenid/www.infokiir.ee ~/zonesshfs
Eelduseks on see, et meil on fuse kerneli moodul lubatud. Virtuaalse privaatserveri puhul ei pruugi see nii olla. Sellisel tuleks teenusepakkujal paluda see lubada.
Võib kontrollida, kas fuse seade eksisteerib:
ls -la /dev/fuse
Samuti peab olema lubatud serveri poolel SFTP protokoll. Kui SCP protokoll võimaldab meil vaid failide kopeerimist, siis SFTP võimaldab rohkemat.
Lahtiühendamiseks kasutame käsklust:
fusermount -u ~/zonesshfs
Põnev teema on veel ssh tunnel. Näiteks soovime oma arendusmasina veebiserveri kogu maailmale ajutiselt nähtavaks teha. See on võimalik, kui meil on kasutada staatilise ip-ga server. Meie arendusmasin võib rahulikult olla dünaamilise ip-ga tulemüüri taga.
Ubuntu serveri korral lisa vajadusel faili /etc/ssh/sshd_config rida:
GatewayPorts clientspecified
Nüüd on meil võimalik oma tulemüüri taga olevas masinas, mida soovime jagada, käsklus:
ssh -R :19999:localhost:80 -R 19990:localhost:22 user@host
See jagab üldsusele pordil 80 töötava veebiserveri, kuid port 19990 on vaid ligipääsetav serveri localhost liidesel. Erinevus on selles, kas kasutame pordi ees koolonit või mitte.
Seega suvaline kasutaja võib oma veebibrauseris avada aadressi http://host:19999. Kui ta proovib ssh@host -p 19990, siis see tal ei õnnestu. Vajadusel saab kasutaja siiski ssh ressursile ligi, kui tal on ligipääs avalikku serverisse.
ssh -L 19990:localhost:19990 user@host
Kui anda nüüd uuesti käsklus ssh@localhost -p 19990, siis seekord ühendus luuakse.
Windowsi arvutis ei pea kasutama käsurida. Võib kasutada ka PuTTY programmi. Privaatvõtme salvestamiseks võib kasutada puttygen.exe programmi. Privaatvõtme saab määrata siin:
Reverse tunneli saab tekitada nii:
Oluline on valida Remote. Kui kasutada koolonit Source port ees, siis teeme oma teenuse tervele maailmale kättesaadavaks. Käsurealt näeks sama asi välja nii:
ssh -R :8001:localhost:8086 -R 8000:localhost:8085 user@host
Suvalise arvutiga ligipääsuks putty kasutamine:
Sellele vastab ssh käsurida:
ssh -L 9000:localhost:8000 -L 9001:localhost:8001 -L 19999:localhost:19999 user@host
Nüüd veel näpuharjutus tähelepanelikule lugejale:
Virtuaalserveri teenusepakkuja lubab MySQL serverile väljastpoolt ligi vaid kindlatelt staatilistelt IP aadressidelt. Meie aga sooviksime ligipääsu ka enda sülearvutist, mis on avalikus võrgus, näiteks viibine Elroni rongis.
Fikseeritud IP-ga avalikus serveris anname järgmised käsklused.
Kui "ssh root@localhost" küsib parooli:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
Seejärel:
ssh -R 3306:dbhost.mysql.zone.ee:3306 root@localhost
Nüüd meie serveri localhost liides kuulab porti 3306, mis on tegelikult serverist dbhost.mysql.zone.ee:3306.
Selleks, et saaksin ka sülearvutiga ligipääsu, annan sülearvutis käskluse:
ssh -L 3306:localhost:3306 user@host
Siin user@host on siis meie avaliku IP aadressiga server oma kasutajaga.
Nüüd jääb siis veel sülearvutis ühendada ennast andmebaasiga aadressil localhost, MySQL vaikimisi port 3306.
Mis siis, kui ülesanne oleks teistsugune ja vaja oleks, et kogu maailm selle virtuaalserveri teenusepakkuja MySQL andmebaasile ligi pääseks? Tasub kaaluda, kas see on mõistlik, kuid vastus sellele küsimusele on järgmine:
ssh -R :3306:dbhost.mysql.zone.ee:3306 root@localhost
Erinevus on vaid koolonis, seega tasub olla tähelepanelik.
Linke:
https://en.wikipedia.org/wiki/Secure_Shell
https://www.digitalocean.com/community/tutorials/how-to-set-up-ssh-keys--2
https://winscp.net/eng/docs/lang:et
http://www.dennyzhang.com/export_mac_laptop/
http://askubuntu.com/questions/50064/reverse-port-tunnelling
http://www.chiark.greenend.org.uk/~sgtatham/putty/download/
https://en.wikipedia.org/wiki/SSH_File_Transfer_Protocol
https://en.wikipedia.org/wiki/Secure_copy
http://www.commandlinefu.com/commands/matching/ssh/c3No/sort-by-votes