#安裝
1、先安裝telnet,避免安裝ssh出錯(cuò)后無法
yum install telnet-server -y
systemctl start telnet.socket
netstat -lnt|grep 23 檢查telnet端口是否正常打開
如果telnet無法登錄 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能訪問C,可通過ssh代理讓A直接訪問到C
正向代理
在本地啟動(dòng)端口,把本地端口數(shù)據(jù)轉(zhuǎn)發(fā)到遠(yuǎn)端(讓執(zhí)行命令的主機(jī)將能訪問的端口暴露出來)
1、連接在B主機(jī)上啟動(dòng)一個(gè)端口PortB,將B主機(jī)的端口轉(zhuǎn)發(fā)到C主機(jī)的端口,此時(shí)A訪問B主機(jī)的PortB等于訪問C主機(jī)的PortC ,遠(yuǎn)程端口映射到其他機(jī)器,訪問遠(yuǎn)程主機(jī)等同于訪問該主機(jī)映射到其他主機(jī)的端口
ssh -CfNg -L 0.0.0.0:PortB:HostC:PortC -o ServerAliveInterval=60 user@HostC
2、在A主機(jī)上將啟動(dòng)一個(gè)端口PortA,通過HostB轉(zhuǎn)發(fā)到HostC:PortC上,這時(shí)訪問HostA:PortA 相當(dāng)于訪問 HostC:PortC(本地端口通過跳板映射到其他機(jī)器,讓A能訪問B能訪問的端口)
ssh -CfNg -L 0.0.0.0:PortA:HostC:PortC -o ServerAliveInterval=60 user@HostB
反向代理
由遠(yuǎn)端將自己能訪問的端口通過ssh轉(zhuǎn)發(fā)出去,并告訴近端準(zhǔn)備一個(gè)端口監(jiān)聽,訪問近端監(jiān)聽端口的所有流量會(huì)由遠(yuǎn)端轉(zhuǎn)發(fā)到C主機(jī)指定端口(讓A能訪問到執(zhí)行命令的主機(jī)B能訪問到的C端口)
1、B主機(jī)執(zhí)行命令啟動(dòng)一個(gè)轉(zhuǎn)發(fā),將A主機(jī)的PortA映射到自己能訪問的C的PortC, 此時(shí)訪問A主機(jī)PortA等于訪問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)訪問,可通過本地轉(zhuǎn)發(fā)將webport映射出去,此時(shí)訪問A主機(jī)PortA等于訪問本機(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ā)送空字符,避免斷開
Host myserver
HostName 192.168.1.10
Port 22
User root
IdentityFile ~/.ssh/對(duì)應(yīng)服務(wù)器私鑰文件
配置后可通過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ī)的~
用一臺(tái)能夠公網(wǎng)訪問的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ī)的端口 開啟ssh的轉(zhuǎn)發(fā)功能,以u(píng)buntu server12.04為例,服務(wù)器默認(rèn)是安裝了openssh-server的,在/etc/ssh/sshd_config末尾追加一下命令: 重啟ssh 正向代理的典型例子是主機(jī)(A)通過一臺(tái)可以訪問的主機(jī)(B)訪問主機(jī)(C)提供的服務(wù)。 主機(jī)A不能直接訪問主機(jī)C提供的服務(wù),但是主機(jī)A可以訪問主機(jī)B,主機(jī)B可以訪問到主機(jī)C的服務(wù),那我們可以在主機(jī)A上使用以下命令 其中CNf都不是必須參數(shù),C是對(duì)數(shù)據(jù)進(jìn)行壓縮,N代表不執(zhí)行遠(yuǎn)程命令(盡量帶上),f代表后臺(tái)執(zhí)行。 我們可以將問題簡(jiǎn)化一些,假設(shè)主機(jī)B的某個(gè)端口不對(duì)外提供服務(wù),只能夠主機(jī)B自己訪問,那么上述命令中的主機(jī)C和主機(jī)B將是一樣的,命令將變?yōu)?/p> 以上兩條命令是等價(jià)的,因?yàn)樵诘谝粋€(gè)端口(a_port)后面的地址(b_ip)與端口(b_port)是相對(duì)于命令最末端的主機(jī)(b_ip)來說的,如果主機(jī)A是要用主機(jī)B來代理主機(jī)B的某項(xiàng)服務(wù),那么第一個(gè)端口后寫的主機(jī)地址為主機(jī)B的ip或者是localhost(127.0.0.1)是沒有區(qū)別的。 可以看到正向代理是給自己代理提供服務(wù)的。 反向代理與正向代理的原理產(chǎn)不多,都是用過ssh進(jìn)行數(shù)據(jù)的傳輸,只是使用場(chǎng)景不同.反向代理的作用可以認(rèn)為是把內(nèi)網(wǎng)中的主機(jī)(A)暴露出來,以便于所有的主機(jī)都可以訪問到主機(jī)A的服務(wù)。 假定我們使用一臺(tái)公網(wǎng)可以訪問的主機(jī)(B)來給主機(jī)A做反向代理,那么命令如下 CNf與正向代理相同,也不是必須的,在主機(jī)A上使用以上命令,即可以把主機(jī)B的b_port端口映射到主機(jī)A的a_port端口。 舉個(gè)簡(jiǎn)單的例子,主機(jī)A處于內(nèi)網(wǎng)中,公網(wǎng)不能訪問,在主機(jī)A上有一個(gè)http服務(wù)器,現(xiàn)在想讓異地的朋友能夠看到這個(gè)服務(wù)器上的內(nèi)容,那我們就可以使用一下命令: b_port自己定義,不要沖突就行,之后我們通過b_ip:b_port就可以訪問到主機(jī)A的http服務(wù)了。準(zhǔn)備工作
GatewayPorts yes
service ssh restart
正向代理
ssh -CNfL a_port:c_ip:c_port b_user@b_ip
主機(jī)A可以通過訪問自己的a_port端口來訪問主機(jī)C的c_port端口,例如主機(jī)A要通過自己的6666端口訪問主機(jī)C的80端口,則需要執(zhí)行一下命令ssh -CNfL 6666:c_ip:80 b_user@b_ip
ssh -CNfL a_port:b_ip:b_port b_user@b_ipssh -CNfL a_port:localhost:b_port b_user@b_ip
反向代理
ssh -CNfR b_port:127.0.0.1:a_port b_user@b_ip
ssh -CNfR b_port:127.0.0.1:80 b_user@b_ip
聯(lián)系客服