教 程 一#安裝 1、先安裝telnet,避免安裝ssh出錯(cuò)后無(wú)法 yum install telnet-server -y systemctl start telnet.socket netstat -lnt|grep 23 檢查telnet端口是否正常打開(kāi) 如果telnet無(wú)法登錄 vim /etc/securetty 最后一行添加pts/1 2、確保telnet能夠正常登錄后,卸載ssh 備份原有ssh配置文件,然后卸載系統(tǒng)預(yù)裝的ssh cp /etc/ssh/sshd_config{,.bak} yum remove openssh -y 3、源碼安裝ssh tar zxvf openssh-8.7p1.tar.gz cd openssh-8.7p1/ ./configure --prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/usr --with-pam(pam可選項(xiàng)) 報(bào)錯(cuò)miss zlib執(zhí)行yum install zlib-devel -y make -j 4 && make install 備注: –prefix=當(dāng)前ssh安裝目錄 –sysconfdir=配置文件目錄 –with-ssl-dir=openssl安裝目錄 –with-pam 啟用pam 4、添加啟動(dòng)文件 cd contrib/redhat/ cp sshd.init /etc/init.d/sshd chkconfig --add sshd chkconfig sshd on 啟用pam則將sshd.pam 復(fù)制到/etc/pam.d/ 如不能登錄則設(shè)置 setenforce 0 臨時(shí)關(guān)閉 修改 SELINUX=disabled sed -i 's/^SELINUX=.*$/SELINUX=disabled/’ /etc/selinux/config 嘗試登錄ssh,一切正常后關(guān)閉telnet服務(wù) 確認(rèn)安裝完畢后注釋/etc/securetty 添加的pts/1 關(guān)閉telnet服務(wù) 5、安裝openssl 部分版本ssh升級(jí)需安裝高版本的openssl yum remove openssh -y 卸載原有openssl 下載openssl 解壓 openssl cd openssl-1.1.1l/ ./config --prefix=/usr/ make -j 4&& make install #常用配置 ssh代理 假設(shè)場(chǎng)景,有3臺(tái)服務(wù)器,ABC,C不通外網(wǎng),B能訪問(wèn)C,可通過(guò)ssh代理讓A直接訪問(wèn)到C 正向代理 在本地啟動(dòng)端口,把本地端口數(shù)據(jù)轉(zhuǎn)發(fā)到遠(yuǎn)端(讓執(zhí)行命令的主機(jī)將能訪問(wèn)的端口暴露出來(lái)) 1、連接在B主機(jī)上啟動(dòng)一個(gè)端口PortB,將B主機(jī)的端口轉(zhuǎn)發(fā)到C主機(jī)的端口,此時(shí)A訪問(wèn)B主機(jī)的PortB等于訪問(wèn)C主機(jī)的PortC ,遠(yuǎn)程端口映射到其他機(jī)器,訪問(wèn)遠(yuǎn)程主機(jī)等同于訪問(wèn)該主機(jī)映射到其他主機(jī)的端口 ssh -CfNg -L 0.0.0.0:PortB:HostC:PortC -o ServerAliveInterval=60 user@HostC 2、在A主機(jī)上將啟動(dòng)一個(gè)端口PortA,通過(guò)HostB轉(zhuǎn)發(fā)到HostC:PortC上,這時(shí)訪問(wèn)HostA:PortA 相當(dāng)于訪問(wèn) HostC:PortC(本地端口通過(guò)跳板映射到其他機(jī)器,讓A能訪問(wèn)B能訪問(wèn)的端口) ssh -CfNg -L 0.0.0.0:PortA:HostC:PortC -o ServerAliveInterval=60 user@HostB 反向代理 由遠(yuǎn)端將自己能訪問(wèn)的端口通過(guò)ssh轉(zhuǎn)發(fā)出去,并告訴近端準(zhǔn)備一個(gè)端口監(jiān)聽(tīng),訪問(wèn)近端監(jiān)聽(tīng)端口的所有流量會(huì)由遠(yuǎn)端轉(zhuǎn)發(fā)到C主機(jī)指定端口(讓A能訪問(wèn)到執(zhí)行命令的主機(jī)B能訪問(wèn)到的C端口) 1、B主機(jī)執(zhí)行命令啟動(dòng)一個(gè)轉(zhuǎn)發(fā),將A主機(jī)的PortA映射到自己能訪問(wèn)的C的PortC, 此時(shí)訪問(wèn)A主機(jī)PortA等于訪問(wèn)C主機(jī)的PortC ssh -CfNg -R HostA:PortA:HostC:PortC -o ServerAliveInterval=60 user@HostA 注:A主機(jī)/etc/ssh/sshd_config需添加 GatewayPorts yes 假如本機(jī):只有一個(gè)ssh端口對(duì)外,另一個(gè)webport只能內(nèi)網(wǎng)訪問(wèn),可通過(guò)本地轉(zhuǎn)發(fā)將webport映射出去,此時(shí)訪問(wèn)A主機(jī)PortA等于訪問(wèn)本機(jī)webport ssh -CfNg -R HostA:PortA:127.0.0.1:webport -o ServerAliveInterval=60 user@HostA 參數(shù)詳解: -C:壓縮數(shù)據(jù) -f:后臺(tái)運(yùn)行 -N:不執(zhí)行遠(yuǎn)程命令,需要繼續(xù)再目標(biāo)服務(wù)器執(zhí)行命令可不加 -g:允許遠(yuǎn)端主機(jī)連接本地轉(zhuǎn)發(fā)端口 ssh登錄配置 配置 ~/.ssh/config Host * ServerAliveInterval 60 //自動(dòng)發(fā)送空字符,避免斷開(kāi) Host myserver HostName 192.168.1.10 Port 22 User root IdentityFile ~/.ssh/對(duì)應(yīng)服務(wù)器私鑰文件 配置后可通過(guò)ssh myserver 直接登錄目標(biāo)服務(wù)器 私鑰登錄 ssh-keygen -t rsa -C “myserver” //創(chuàng)建密鑰對(duì) -t 指定協(xié)議 -C 添加描述 ssh-copy-id -i '公鑰文件’ remote_ip //將本機(jī)的公鑰文件添加到遠(yuǎn)程主機(jī)的~ 教 程 二ssh反向代理+正向代理用一臺(tái)能夠公網(wǎng)訪問(wèn)的host作為跳板機(jī),轉(zhuǎn)發(fā)不同端口到內(nèi)網(wǎng)目標(biāo)機(jī)的ssh端口,進(jìn)而實(shí)現(xiàn)ssh遠(yuǎn)程登錄。 配置中將會(huì)用到的SSH參數(shù): 反向代理 ssh -fCNR 正向代理 ssh -fCNL -g:允許遠(yuǎn)程主機(jī)連接主機(jī)(host)的轉(zhuǎn)發(fā)端口; -f 后臺(tái)執(zhí)行ssh指令 -C 允許壓縮數(shù)據(jù) -N 不執(zhí)行遠(yuǎn)程指令 -R 將遠(yuǎn)程主機(jī)(服務(wù)器)的某個(gè)端口轉(zhuǎn)發(fā)到本地主機(jī)指定的端口 -L 將本地機(jī)(客戶機(jī))的某個(gè)端口轉(zhuǎn)發(fā)到遠(yuǎn)端指定機(jī)器的指定端口 -p 指定遠(yuǎn)程主機(jī)的端口 準(zhǔn)備工作開(kāi)啟ssh的轉(zhuǎn)發(fā)功能,以u(píng)buntu server12.04為例,服務(wù)器默認(rèn)是安裝了openssh-server的,在/etc/ssh/sshd_config末尾追加一下命令: GatewayPorts yes 重啟ssh service ssh restart 正向代理正向代理的典型例子是主機(jī)(A)通過(guò)一臺(tái)可以訪問(wèn)的主機(jī)(B)訪問(wèn)主機(jī)(C)提供的服務(wù)。 主機(jī)A不能直接訪問(wèn)主機(jī)C提供的服務(wù),但是主機(jī)A可以訪問(wèn)主機(jī)B,主機(jī)B可以訪問(wèn)到主機(jī)C的服務(wù),那我們可以在主機(jī)A上使用以下命令 ssh -CNfL a_port:c_ip:c_port b_user@b_ip 其中CNf都不是必須參數(shù),C是對(duì)數(shù)據(jù)進(jìn)行壓縮,N代表不執(zhí)行遠(yuǎn)程命令(盡量帶上),f代表后臺(tái)執(zhí)行。 ssh -CNfL 6666:c_ip:80 b_user@b_ip 我們可以將問(wèn)題簡(jiǎn)化一些,假設(shè)主機(jī)B的某個(gè)端口不對(duì)外提供服務(wù),只能夠主機(jī)B自己訪問(wèn),那么上述命令中的主機(jī)C和主機(jī)B將是一樣的,命令將變?yōu)?/p> ssh -CNfL a_port:b_ip:b_port b_user@b_ipssh -CNfL a_port:localhost:b_port b_user@b_ip 以上兩條命令是等價(jià)的,因?yàn)樵诘谝粋€(gè)端口(a_port)后面的地址(b_ip)與端口(b_port)是相對(duì)于命令最末端的主機(jī)(b_ip)來(lái)說(shuō)的,如果主機(jī)A是要用主機(jī)B來(lái)代理主機(jī)B的某項(xiàng)服務(wù),那么第一個(gè)端口后寫的主機(jī)地址為主機(jī)B的ip或者是localhost(127.0.0.1)是沒(méi)有區(qū)別的。 可以看到正向代理是給自己代理提供服務(wù)的。 反向代理反向代理與正向代理的原理產(chǎn)不多,都是用過(guò)ssh進(jìn)行數(shù)據(jù)的傳輸,只是使用場(chǎng)景不同.反向代理的作用可以認(rèn)為是把內(nèi)網(wǎng)中的主機(jī)(A)暴露出來(lái),以便于所有的主機(jī)都可以訪問(wèn)到主機(jī)A的服務(wù)。 假定我們使用一臺(tái)公網(wǎng)可以訪問(wèn)的主機(jī)(B)來(lái)給主機(jī)A做反向代理,那么命令如下 ssh -CNfR b_port:127.0.0.1:a_port b_user@b_ip CNf與正向代理相同,也不是必須的,在主機(jī)A上使用以上命令,即可以把主機(jī)B的b_port端口映射到主機(jī)A的a_port端口。 舉個(gè)簡(jiǎn)單的例子,主機(jī)A處于內(nèi)網(wǎng)中,公網(wǎng)不能訪問(wèn),在主機(jī)A上有一個(gè)http服務(wù)器,現(xiàn)在想讓異地的朋友能夠看到這個(gè)服務(wù)器上的內(nèi)容,那我們就可以使用一下命令: ssh -CNfR b_port:127.0.0.1:80 b_user@b_ip b_port自己定義,不要沖突就行,之后我們通過(guò)b_ip:b_port就可以訪問(wèn)到主機(jī)A的http服務(wù)了。 |
|
|
來(lái)自: onthewaym > 《網(wǎng)絡(luò)》