日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

SSH 運(yùn)維總結(jié)

 三文魚DEX 2024-08-28 發(fā)布于天津

對于linux運(yùn)維工作者而言,使用ssh遠(yuǎn)程遠(yuǎn)程服務(wù)器是再熟悉不過的了!對于ssh的一些嚴(yán)格設(shè)置也關(guān)系到服務(wù)器的安全維護(hù),今天在此,就本人工作中使用ssh的經(jīng)驗(yàn)而言,做一些總結(jié)記錄來下。

-bash: ssh: command not found
解決辦法:'yum install -y openssh-server openssh-clinets'

1.  ssh登錄時(shí)提示:Read from socket failed: Connection reset by peer.
嘗試了很多解決方案均無效,無奈!卸載sshd,然后重新安裝
# yum remove openssh*
# rm -rf /etc/ssh*
# yum install -y openssh*
# systemctl start sshd.service

2.  ssh遠(yuǎn)程登陸后的提示信息
我們經(jīng)常會使用中控機(jī)ssh信任跳轉(zhuǎn)到其他機(jī)器上,但是不知道有沒有運(yùn)維朋友注意到ssh跳轉(zhuǎn)成功后的終端顯示的提示信息?
這些提示信息,是為了方便我們在第一時(shí)間知道ssh跳轉(zhuǎn)到哪臺目標(biāo)機(jī)上,也是為了避免長期頻繁跳轉(zhuǎn)后由于大意造成的誤入機(jī)器操作的風(fēng)險(xiǎn),我們通常會在ssh跳轉(zhuǎn)到目標(biāo)機(jī)器后顯示一些提示信息,在一些國家, 登入給定系統(tǒng)前, 給出未經(jīng)授權(quán)或者用戶監(jiān)視警告信息, 將會受到法律的保護(hù).如下:
[root@bastion-IDC ~]# ssh -p22 192.168.1.15
Last login: Fri Jul 15 13:26:53 2016 from 124.65.197.154
===================================
|||||||||||||||||||||||||||||||||||
===================================
HOSTNAME: monit-server
IPADDRES: 192.168.1.15
===================================
IDC監(jiān)控機(jī)
===================================

那么上面的提醒信息是在哪設(shè)置的呢?
做法一:其實(shí)很簡單,這些信息是在目標(biāo)機(jī)器的/etc/motd文件里自定義的
[root@monit-server ~]# cat /etc/motd
===================================
|||||||||||||||||||||||||||||||||||
===================================
HOSTNAME: monit-server
IPADDRES: 192.168.1.15
===================================
IDC監(jiān)控機(jī)
===================================

做法二:在目標(biāo)機(jī)器的/etc/ssh/sshd_config文件里定義,然后重啟sshd服務(wù)即可。這兩種做法是一致的效果!
Banner /etc/sshfile

[root@host-192-168-1-117 ~]# cat /etc/sshfile
this is 192.168.1.117

遠(yuǎn)程登陸:
[root@linux-node2 ~]# ssh 192.168.1.117
this is 192.168.1.117
[root@host-192-168-1-117 ~]#

3.  實(shí)現(xiàn)SSH無密碼登錄:使用ssh-keygen和ssh-copy-id
ssh-keygen 產(chǎn)生公鑰與私鑰對.
ssh-copy-id 將本機(jī)的公鑰復(fù)制到遠(yuǎn)程機(jī)器的authorized_keys文件中,ssh-copy-id也能讓你有到遠(yuǎn)程機(jī)器的/home/username/.ssh和~/.ssh/authorized_keys的權(quán)利.
操作記錄:
1)第一步:在本地機(jī)器上使用ssh-keygen產(chǎn)生公鑰私鑰對
#ssh-keygen -t rsa //一路默認(rèn)回車
這樣就會在當(dāng)前用戶家目錄下的.ssh目錄里產(chǎn)生公鑰和私鑰文件:id_rsa.pub、id_rsa??梢詫d_rsa.pub公鑰文件復(fù)制成authorized_keys
2)第二步:可以手動(dòng)將本機(jī)的id_rsa.pub公鑰文件內(nèi)容復(fù)制到遠(yuǎn)程目標(biāo)機(jī)的.ssh/authorized_keys文件中,可以就可以實(shí)現(xiàn)ssh無密碼登陸。
當(dāng)然,也可以在本機(jī)直接使用ssh-copy-id將公鑰復(fù)制到遠(yuǎn)程機(jī)器中
#ssh-copy-id -i /root/.ssh/id_rsa.pub user@ip [把本機(jī)的公鑰拷貝到遠(yuǎn)程機(jī)器上,比如B機(jī)器]
也可以不加公鑰路徑,會默認(rèn)加上
#ssh-copy-id user@ip
注意:
ssh-copy-id 將key寫到遠(yuǎn)程機(jī)器的 ~/ .ssh/authorized_key.文件(文件會自動(dòng)創(chuàng)建)中

1
2
對于非22端口(比如22222)情況下的ssh-copy-id的使用,需要這樣用:
# ssh-copy-id -i  /root/.ssh/id_rsa.pub  '-p 22222 root@192.168.18.18'

3)這樣,本機(jī)登錄到上面遠(yuǎn)程機(jī)器(B機(jī)器)就不用輸入密碼
#ssh user@ip

4.  ssh登錄失敗,報(bào)錯(cuò):Pseudo-terminal will not be allocated because stdin
現(xiàn)象:
需要登錄線上的一臺目標(biāo)機(jī)器A,但是不能直接登錄(沒有登錄權(quán)限),需要先登錄B機(jī)器,然后從B機(jī)器跳轉(zhuǎn)到A機(jī)器。
腳本如下:
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh root@101.201.114.106 'ssh -p25791 root@103.10.86.7'

但是在執(zhí)行腳本的時(shí)候報(bào)錯(cuò)如下:
Pseudo-terminal will not be allocated because stdin

原因:
偽終端將無法分配,因?yàn)闃?biāo)準(zhǔn)輸入不是終端。
解決辦法:
需要增加-t -t參數(shù)來強(qiáng)制偽終端分配,即使標(biāo)準(zhǔn)輸入不是終端。
在腳本里添加-t -t參數(shù)即可,如下:
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh root@101.201.114.106 'ssh -t -t -p25791 root@103.10.86.7'

或者
localhost:~ root# cat IDC-7.sh
#!/bin/bash
ssh -t root@101.201.114.106 'ssh -t -t -p25791 root@103.10.86.7'

5.  ssh遠(yuǎn)程登陸緩慢問題
解決辦法:
編譯/etc/ssh/sshd_config配置文件:
UseDNS no
GSSAPIAuthentication no
然后重啟sshd服務(wù)即可!

6.  ssh登錄出現(xiàn):permission denied(publickey.gssapi-with-mic)
解決方法:
修改/etc/ssh/sshd-config文件,將其中的:
PermitRootLogin no修改為yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys前面加上#屏蔽掉
PasswordAuthentication no修改為yes
最后重啟sshd服務(wù)即可!

7.  ssh連接錯(cuò)誤問題
1)  在使用ssh或scp或rsync遠(yuǎn)程連接的時(shí)候,出現(xiàn)如下報(bào)錯(cuò):
Address **** maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
解決方法:
修改本機(jī)ssh_config文件
[root@kvmserver ~]# vim /etc/ssh/ssh_config
GSSAPIAuthentication no
[root@kvmserver ~]#/etc/init.d/sshd restart

問題迎刃而解~~

2)  本機(jī)scp、rsync命令都已具備,但是在使用scp或rsync遠(yuǎn)程同步的時(shí)候報(bào)錯(cuò):
bash: scp: command not found
bash: rsync: command not found
原因:是由于遠(yuǎn)程機(jī)器上沒有安裝scp或rsync造成的!安裝這兩個(gè)命令即可~
yum install openssh-clients
yum install rsync

3)遠(yuǎn)程ssh連接時(shí)錯(cuò)誤“ The X11 forwarding request was rejected!”
解決方法:
將sshd_config中 設(shè)置 X11Forwarding yes
重啟sshd服務(wù)。

8.  ssh連接超時(shí)被踢出問題
當(dāng)使用xshell,SecureCRT等客戶端訪問linux服務(wù)器,有時(shí)候會出現(xiàn)終端定期超時(shí)被踢出的情況。
下面介紹三種方法來防止超時(shí)被踢出的方法,后兩種情況的設(shè)置方法以及通過設(shè)置shell變量來達(dá)到此目的的方法:

1、 配置服務(wù)器
# vim /etc/ssh/sshd_config
1)找到 ClientAliveInterval參數(shù),如果沒有就自己加一行
數(shù)值是秒,比如你設(shè)置為120 ,則是2分鐘
ClientAliveInterval 120
2)ClientAliveCountMax
指如果發(fā)現(xiàn)客戶端沒有響應(yīng),則判斷一次超時(shí),這個(gè)參數(shù)設(shè)置允許超時(shí)的次數(shù)。如3 、5等自定義

修改兩項(xiàng)參數(shù)后如下:
----------------------------
ClientAliveInterval 120
ClientAliveCountMax 3                      //0 不允許超時(shí)次數(shù)
修改/etc/ssh/sshd_config文件,將 ClientAliveInterval 0和ClientAliveCountMax 3的注釋符號去掉,將ClientAliveInterval對應(yīng)的0改成60,沒有就自己輸入。
ClientAliveInterval指定了服務(wù)器端向客戶端請求消息的時(shí)間間隔, 默認(rèn)是0,不發(fā)送.而ClientAliveInterval 60表示每分鐘發(fā)送一次, 然后客戶端響應(yīng), 這樣就保持長連接了.ClientAliveCountMax, 使用默認(rèn)值3即可.ClientAliveCountMax表示服務(wù)器發(fā)出請求后客戶端沒有響應(yīng)的次數(shù)達(dá)到一定值, 就自動(dòng)斷開. 正常情況下, 客戶端不會不響應(yīng).
重新加載sshd服務(wù)。退出客戶端,再次登陸即可驗(yàn)證。
3)重啟sshd service
# /etc/init.d/ssh restart

2、 配置客戶端
#vim /etc/ssh/ssh_config
然后找到里面的
ServerAliveInterval
參數(shù),如果沒有你同樣自己加一個(gè)就好了
參數(shù)意義相同,都是秒數(shù),比如5分鐘等
ServerAliveInterval 300

3、# echo export TMOUT=1000000 >> /root/.bash_profile; source .bash_profile
在Linux 終端的shell環(huán)境中通過設(shè)置環(huán)境變量TMOUT來阻止超時(shí)。如果顯示空白,表示沒有設(shè)置, 等于使用默認(rèn)值0, 一般情況下應(yīng)該是不超時(shí). 如果大于0, 可以在如/etc/profile之類文件中設(shè)置它為0.

9.  ssh遠(yuǎn)程登陸,公鑰授權(quán)不通過:Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
公司IDC機(jī)房服務(wù)器,之前做了跳板機(jī)環(huán)境,其他機(jī)器只允許從跳板機(jī)ssh無密碼信任過去,并且在信任關(guān)系做好后,禁用了其他機(jī)器的密碼登陸功能(sshd_config文件里設(shè)置“PermitEmptyPasswords no”)

后來跳板機(jī)出現(xiàn)了問題,打算重裝這臺機(jī)器,重裝前取消了其他機(jī)器里只允許跳板機(jī)ssh信任關(guān)系,并且恢復(fù)了密碼登陸功能:
[root@bastion-IDC ssh]# vim /etc/ssh/sshd_config
PermitEmptyPasswords yes
[root@bastion-IDC ssh]# service sshd restart

修改后,當(dāng)時(shí)在其他機(jī)器間是可以ssh相互登陸,當(dāng)時(shí)沒在意,以為一切ok了。
可是,到了第二天,再次ssh登陸時(shí),尼瑪,居然報(bào)錯(cuò)了~~
Permission denied (publickey,gssapi-keyex,gssapi-with-mic).

最后發(fā)現(xiàn)是selinux惹的禍!關(guān)閉它即可。
1)臨時(shí)關(guān)閉selinux
[root@bastion-IDC ssh]# setenforce 0
[root@bastion-IDC ssh]# getenforce
Permissive
2)永久關(guān)閉
[root@bastion-IDC ssh]# vim /etc/sysconfig/selinux
SELINUX=disabled
[root@bastion-IDC ssh]# reboot #重啟系統(tǒng)才能生效

說明:
1)ssh可同時(shí)支持publickey和password兩種授權(quán)方式,publickey默認(rèn)不開啟,需要配置為yes。
如果客戶端不存在.ssh/id_rsa,則使用password授權(quán);存在則使用publickey授權(quán);如果publickey授權(quán)失敗,依然會繼續(xù)使用password授權(quán)。

2)GSSAPI身份驗(yàn)證.
GSSAPIAuthentication 是否允許使用基于 GSSAPI 的用戶認(rèn)證.默認(rèn)值為'no'.僅用于SSH-2.
GSSAPICleanupCredentials 是否在用戶退出登錄后自動(dòng)銷毀用戶憑證緩存。默認(rèn)值是'yes'.僅用于SSH-2.
需要特別注意的是:
GSSAPI是公共安全事務(wù)應(yīng)用程序接口(GSS-API)
公共安全事務(wù)應(yīng)用程序接口以一種統(tǒng)一的模式為使用者提供安全事務(wù),由于它支持最基本的機(jī)制和技術(shù),所以保證不同的應(yīng)用環(huán)境下的可移植性.
該規(guī)范定義了GSS-API事務(wù)和基本元素,并獨(dú)立于基本的機(jī)制和程序設(shè)計(jì)語言環(huán)境,并借助于其它相關(guān)的文檔規(guī)范實(shí)現(xiàn).

如果我們在服務(wù)端打開GSSAPIAuthentication配置項(xiàng),如下:
[root@server ~]#vim /etc/ssh/sshd_config
........
GSSAPIAuthentication yes
GSSAPICleanupCredentials yes

那么在客戶端登錄服務(wù)端會用gssapi-keyex,gssapi-with-mic進(jìn)行身份校驗(yàn),同樣客戶端也要支持這種身份驗(yàn)證,如下:

[root@client ~]#vim /etc/ssh/ssh_config
GSSAPIAuthentication yes
GSSAPIDelegateCredentials yes

我們在客戶端連接SSH服務(wù)端,如下:
ssh -v 192.168.1.11
.................
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password

我們看到如下的信息:
debug1: Unspecified GSS failure. Minor code may provide more information
No credentials cache found
debug1: Authentications that can continue: publickey,gssapi-keyex,gssapi-with-mic,password
debug1: Next authentication method: gssapi-keyex
debug1: No valid Key exchange context
說明SSH登錄時(shí)采用GSSAPI的方式進(jìn)行身份驗(yàn)證,但我們的系統(tǒng)不支持.

最后如果我們不用這種方式進(jìn)行身份驗(yàn)證的話,建議關(guān)閉這個(gè)選項(xiàng),這樣可以提高驗(yàn)證時(shí)的速度.

10.  ssh自定義安全設(shè)置
1)  為了ssh登陸的時(shí)候加一層保護(hù),可以修改默認(rèn)端口。修改ssh服務(wù)配置文件/etc/ssh/sshd_config
port 2222

這樣遠(yuǎn)程連接時(shí)加短褲
#ssh 192.168.1.83 -p 2222

2)  ssh使用時(shí)加-l后面跟用戶名,表示登陸到對方的這個(gè)用戶下面。
#ssh -l wangshibo 192.168.1.83 -p 2222
等同于
#ssh wangshibo@192.168.1.83 -p 2222

3)  限制ssh登陸的來源ip,白名單設(shè)置(hosts.allow優(yōu)先級最高,具體參考:Linux服務(wù)器安全登錄設(shè)置記錄
一是通過iptables設(shè)置ssh端口的白名單,如下設(shè)置只允許192.168.1.0/24網(wǎng)段的客戶機(jī)可以遠(yuǎn)程連接本機(jī)
#vim /etc/sysconfig/iptables
-A INPUT -s 192.168.1.0/24 -p tcp -m state --state NEW -m tcp --dport 2222 -j ACCEPT
二是通過/etc/hosts.allow里面進(jìn)行限制(如下),/etc/hosts.deny文件不要任何內(nèi)容編輯,保持默認(rèn)!
#vim /etc/hosts.allow
sshd:192.168.1.*,192.168.9.*,124.65.197.154,61.148.60.42,103.10.86.7:allow
sshd:all:deny

4)僅允許特定的用戶通過SSH登陸
如不允許root用戶登錄;
只允許幾個(gè)指定的用戶登錄(比如wangshibo、guohuihui、liuxing用戶)
禁止某些指定的用戶登錄(比如zhangda,liqin用戶)
但是要注意:設(shè)置的這幾個(gè)用戶必須同時(shí)存在于本機(jī)和對方機(jī)器上
修改ssh服務(wù)配置文件/etc/ssh/sshd_config
PermitRootLogin no //將yes修改為no
AllowUsers      wangshibo guohuihui liuxing //這個(gè)參數(shù)AllowUsers如果不存在,需要手動(dòng)創(chuàng)建,用戶之間空格隔開
DenyUsers      zhagnda liqin //這個(gè)參數(shù)DenyUsers如果不存在,需要手動(dòng)創(chuàng)建,用戶之間空格隔開

也可以設(shè)置僅允許某個(gè)組的成員通過ssh訪問主機(jī)。
AllowGroups wheel ops

實(shí)例說明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
1)只允許指定用戶進(jìn)行登錄(白名單):
/etc/ssh/sshd_config 配置文件中設(shè)置 AllowUsers 選項(xiàng)。格式如下:
AllowUsers    root grace kevin app         
表示只允許grace用戶、kevin用戶通過ssh登錄本機(jī)。
AllowUsers    root@192.168.10.10 app@192.168.10.11 kevin@192.168.10.13         
表示只允許從192.168.10.10登錄的root用戶、從192.168.10.11登錄的app用戶、從192.168.10.13登錄的kevin用戶可以通過ssh登錄本機(jī)。
2)只拒絕指定用戶進(jìn)行登錄(黑名單):)
/etc/ssh/sshd_config配置文件中設(shè)置DenyUsers選項(xiàng)。格式如下:  
DenyUsers    wangbo linan zhangyang    
表示拒絕wangbo、linan和zhangyang用戶通過ssh登錄本機(jī)。
需要注意的是:
- AllowUsers、DenyUsers跟后面的配置之間使用TAB鍵進(jìn)行隔開
- 多個(gè)百名單或黑名單之間使用空格隔開
例子:
[root@Centos6 ~]# cat /etc/ssh/sshd_config
.......
AllowUsers    root@192.168.10.202 app@192.168.10.200 kevin@192.168.10.202
[root@Centos6 ~]# /etc/init.d/sshd restart
[root@Centos6 ~]# cat /etc/ssh/sshd_config
.......
AllowUsers    root app kevin
[root@Centos6 ~]# /etc/init.d/sshd restart
[root@Centos6 ~]# cat /etc/ssh/sshd_config
.......
DenyUsers    wangbo linan zhangyang
[root@Centos6 ~]# /etc/init.d/sshd restart
如下,由于已經(jīng)允許了app和root登錄,則后面針對root@192.168.10.202和app@192.168.10.200的限制就無效了(兩者別放在一起配置)
[root@Centos6 ~]# cat /etc/ssh/sshd_config
.......
AllowUsers    app root root@192.168.10.202 app@192.168.10.200
[root@Centos6 ~]# /etc/init.d/sshd restart

########  還可以使用pam規(guī)則限制ssh登錄  ########

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
1)允許指定的用戶(比如kevin、grace賬號)進(jìn)行登錄
/etc/pam.d/sshd文件第一行加入,一定要在第一行,因?yàn)橐?guī)則是自上而下進(jìn)行匹配的。
auth required pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail
然后在/etc下建立sshusers文件,編輯這個(gè)文件,加入你允許使用ssh服務(wù)的用戶名,不用重新啟動(dòng)sshd服務(wù)。
最后重啟sshd服務(wù)即可!
操作如下:
[root@docker-test1 ~]# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_listfile.so item=user sense=allow file=/etc/sshusers onerr=fail
........
[root@docker-test1 ~]# touch /etc/sshusers
[root@docker-test1 ~]# vim /etc/sshusers
kevin
grace
[root@docker-test1 ~]# /etc/init.d/sshd restart
2)pam規(guī)則也可以寫成deny的。比如拒絕kevin、grace賬號進(jìn)行登錄
操作如下:
[root@docker-test1 ~]# vim /etc/pam.d/sshd
#%PAM-1.0
auth required pam_listfile.so item=user sense=deny file=/etc/sshusers onerr=succeed
........
[root@docker-test1 ~]# touch /etc/sshusers
[root@docker-test1 ~]# vim /etc/sshusers
kevin
grace
[root@docker-test1 ~]# /etc/init.d/sshd restart
3)pam規(guī)則可以使用group限制。
允許規(guī)則:
auth required pam_listfile.so item=group sense=allow file=/etc/security/allow_groups onerr=fail
禁止規(guī)則:
auth required pam_listfile.so item=group sense=deny file=/etc/security/deny_groups onerr=succeed
操作如下:
[root@docker-test1 ~]# vim /etc/pam.d/sshd  
#%PAM-1.0
auth required pam_listfile.so item=group sense=allow file=/etc/security/allow_groups onerr=fail
新建一個(gè)組,組名為bobo,然后將kevin和grace添加到這個(gè)bobo組內(nèi)
[root@docker-test1 ~]# groupadd bobo
[root@docker-test1 ~]# gpasswd -a kevin bobo
Adding user kevin to group bobo
[root@docker-test1 ~]# usermod -G bobo grace
[root@docker-test1 ~]# id kevin
uid=1000(kevin) gid=1000(kevin) groups=1000(kevin),1002(bobo)
[root@docker-test1 ~]# id grace
uid=1001(grace) gid=1001(grace) groups=1001(grace),1002(bobo)
/etc/security/allow_groups文件按中加入組名(注意如果不加root,則root就不能被允許登錄了)
[root@docker-test1 ~]# vim /etc/security/allow_groups
bobo
[root@docker-test1 ~]# /etc/init.d/sshd restart
如上設(shè)置后,則只有kevin用戶能被允許登錄!
如果是禁止規(guī)則,則第一行改為下面內(nèi)容:
auth required pam_listfile.so item=group sense=deny file=/etc/security/deny_groups onerr=succeed

除此之外,禁止某些用戶ssh登錄,可以 使用passwd或usermod命令進(jìn)行賬號鎖定

5)取消密碼驗(yàn)證,只用密鑰對驗(yàn)證
修改ssh服務(wù)配置文件/etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes

6)給賬號設(shè)置強(qiáng)壯的密碼:將密碼保存到文本進(jìn)行復(fù)制和粘帖就可以了
# yum -y install expect
# mkpasswd -l 128 -d 8 -C 15 -s 10                                  
lVj.jg&sKrf0cvtgmydqo7qPotxzxen9mefy?ej!kcaX2gQrcu2ndftkeamllznx>iHikTagiVz0$cMtqOcIypkpd,vvD*kJhs3q@sb:CiCqgtqdqvse5lssfmranbtx
參數(shù)說明:
-l 密碼長度
-d 多少個(gè)數(shù)字
-C 大寫字母個(gè)數(shù)
-s 特殊符號的個(gè)數(shù)

7)只允許通過指定的網(wǎng)絡(luò)接口來訪問SSH服務(wù),(如果本服務(wù)器有多個(gè)IP的時(shí)候)
仍然是修改/etc/ssh/sshd_config,如下:
ListenAddress 192.168.1.15                //默認(rèn)監(jiān)聽的是0.0.0.0

這樣,就只允許遠(yuǎn)程機(jī)器通過ssh連接本機(jī)的192.168.1.15內(nèi)網(wǎng)ip來進(jìn)行登陸了。

8)禁止空密碼登錄
如果本機(jī)系統(tǒng)有些賬號沒有設(shè)置密碼,而ssh配置文件里又沒做限制,那么遠(yuǎn)程通過這個(gè)空密碼賬號就可以登陸了,這是及其不安全的!
所以一定要禁止空密碼登陸。修改/etc/ssh/sshd_config,如下:
PermitEmptyPasswords no //這一項(xiàng),默認(rèn)就是禁用空密碼登陸

9) ssh_config和sshd_config
ssh_config和sshd_config都是ssh服務(wù)器的配置文件,二者區(qū)別在于,前者是針對客戶端的配置文件,后者則是針對服務(wù)端的配置文件。兩個(gè)配置文件都允許你通過設(shè)置不同的選項(xiàng)來改變客戶端程序的運(yùn)行方式。sshd_config的配置一般都比較熟悉,下面單獨(dú)說下ssh_config針對客戶端的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
[root@dns01 dns_rsync]# cat /etc/ssh/ssh_config
# Site-wide defaults for various options
   Host *
        ForwardAgent no
        ForwardX11 no
        RhostsAuthentication no
        RhostsRSAAuthentication no
    ?    RSAAuthentication yes
        PasswordAuthentication yes
        FallBackToRsh no
        UseRsh no
        BatchMode no
        CheckHostIP yes
        StrictHostKeyChecking no
        IdentityFile ~/.ssh/identity
        Port 22
        Cipher blowfish
        EscapeChar ~
下面對上述選項(xiàng)參數(shù)逐進(jìn)行解釋:
# Site-wide defaults for various options
帶“#”表示該句為注釋不起作,該句不屬于配置文件原文,意在說明下面選項(xiàng)均為系統(tǒng)初始默認(rèn)的選項(xiàng)。說明一下,實(shí)際配置文件中也有很多選項(xiàng)前面加有“#”注釋,雖然表示不起作用,其實(shí)是說明此為系統(tǒng)默認(rèn)的初始化設(shè)置。
Host *
'Host'只對匹配后面字串的計(jì)算機(jī)有效,“*”表示所有的計(jì)算機(jī)。從該項(xiàng)格式前置一些可以看出,這是一個(gè)類似于全局的選項(xiàng),表示下面縮進(jìn)的選項(xiàng)都適用于該設(shè)置,可以指定某計(jì)算機(jī)替換*號使下面選項(xiàng)只針對該算機(jī)器生效。
ForwardAgent no
'ForwardAgent'設(shè)置連接是否經(jīng)過驗(yàn)證代理(如果存在)轉(zhuǎn)發(fā)給遠(yuǎn)程計(jì)算機(jī)。
ForwardX11 no
'ForwardX11'設(shè)置X11連接是否被自動(dòng)重定向到安全的通道和顯示集(DISPLAY set)。
RhostsAuthentication no
'RhostsAuthentication'設(shè)置是否使用基于rhosts的安全驗(yàn)證。
RhostsRSAAuthentication no
'RhostsRSAAuthentication'設(shè)置是否使用用RSA算法的基于rhosts的安全驗(yàn)證。
RSAAuthentication yes
'RSAAuthentication'設(shè)置是否使用RSA算法進(jìn)行安全驗(yàn)證。
PasswordAuthentication yes
'PasswordAuthentication'設(shè)置是否使用口令驗(yàn)證。
FallBackToRsh no
'FallBackToRsh'設(shè)置如果用ssh連接出現(xiàn)錯(cuò)誤是否自動(dòng)使用rsh,由于rsh并不安全,所以此選項(xiàng)應(yīng)當(dāng)設(shè)置為'no'
UseRsh no
'UseRsh'設(shè)置是否在這臺計(jì)算機(jī)上使用'rlogin/rsh',原因同上,設(shè)為'no'。
BatchMode no
'BatchMode':批處理模式,一般設(shè)為'no';如果設(shè)為'yes',交互式輸入口令的提示將被禁止,這個(gè)選項(xiàng)對腳本文件和批處理任務(wù)十分有用。
CheckHostIP yes
'CheckHostIP'設(shè)置ssh是否查看連接到服務(wù)器的主機(jī)的IP地址以防止DNS欺騙。建議設(shè)置為'yes'。
StrictHostKeyChecking no
'StrictHostKeyChecking'如果設(shè)為'yes'ssh將不會自動(dòng)把計(jì)算機(jī)的密匙加入'$HOME/.ssh/known_hosts'文件,且一旦計(jì)算機(jī)的密匙發(fā)生了變化,就拒絕連接。
IdentityFile ~/.ssh/identity
'IdentityFile'設(shè)置讀取用戶的RSA安全驗(yàn)證標(biāo)識。
Port 22
'Port'設(shè)置連接到遠(yuǎn)程主機(jī)的端口,ssh默認(rèn)端口為22。
Cipher blowfish
“Cipher”設(shè)置加密用的密鑰,blowfish可以自己隨意設(shè)置。
EscapeChar ~
“EscapeChar”設(shè)置escape字符。<br>
=================================================================================
比如說,A機(jī)器的ssh端口是22,B機(jī)器的端口是22222,一般來說A機(jī)器ssh連接B機(jī)器的時(shí)候是使用-p22222指定端口。但是可以修改A機(jī)器的/etc/ssh/ssh_config文件中的
Port為22222,這樣A機(jī)器ssh連接的時(shí)候就默認(rèn)使用22222端口了。

########  去掉SSH公鑰檢查的方法(交互式y(tǒng)es/no)########

SSH公鑰檢查是一個(gè)重要的安全機(jī)制,可以防范中間人劫持等黑客攻擊。但是在特定情況下,嚴(yán)格的 SSH 公鑰檢查會破壞一些依賴SSH協(xié)議的自動(dòng)化任務(wù),就需要一種手段能夠繞過SSH的公鑰檢查。
SSH連接遠(yuǎn)程主機(jī)時(shí),會檢查主機(jī)的公鑰。如果是第一次連接該主機(jī),會顯示該主機(jī)的公鑰摘要,彈出公鑰確認(rèn)的提示,提示用戶是否信任該主機(jī)(Yes/no)。當(dāng)選擇Yes接受,就會將該主機(jī)的公鑰追加到文件 ~/.ssh/known_hosts 中。當(dāng)再次連接該主機(jī)時(shí),就不會再提示該問題了。
SSH公鑰檢查有好處,但首次連接時(shí)會導(dǎo)致某些自動(dòng)化任務(wù)中斷,或者由于 ~/.ssh/known_hosts 文件內(nèi)容清空,導(dǎo)致自動(dòng)化任務(wù)中斷。

去掉SSH公鑰檢查的方法:
1)SSH客戶端的StrictHostKeyChecking 配置指令,可以實(shí)現(xiàn)當(dāng)?shù)谝淮芜B接服務(wù)器時(shí),自動(dòng)接受新的公鑰。只需要修改 /etc/ssh/ssh_config 文件,包含下列語句:
StrictHostKeyChecking no

2)或者在ssh連接命令中使用-oStrictHostKeyChecking=no參數(shù)
[root@puppet ~]# ssh -p22222 172.168.1.33 -oStrictHostKeyChecking=no
或者
[root@puppet ~]# ssh -p22222 172.168.1.33 -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no

########  ssh 登陸忽略known_hosts文件  ########
使用ssh登錄遠(yuǎn)程機(jī)器,同時(shí)會把ssh信息記錄在本地的~/.ssh/known_hsots文件中。如果出現(xiàn)ssh沖突了,需要手動(dòng)刪除或修改known_hsots里面對應(yīng)遠(yuǎn)程機(jī)器的ssh信息。那么如果忽略掉這個(gè)known_hosts的訪問? 操作如下:
1)修改/etc/ssh/sshd_config 配置文件中的選項(xiàng) IgnoreUserKnownHosts 改成 yes,重啟sshd服務(wù)即可。
2)如果還是不行,就在/etc/ssh/sshd_config 配置文件中再加入一下幾行,然后再重啟sshd服務(wù)。
StrictHostKeyChecking no
UserKnownHostsFile /dev/null

########  ansible中取消ssh交換式y(tǒng)es/no  ########
配置文件/etc/ansible/ansible.cfg的 [defaults] 中(打開注釋)
# uncomment this to disable SSH key host checking
host_key_checking = False

########  ssh只允許使用key登錄, 禁止使用密碼登錄  ########
1)  生產(chǎn)公私鑰文件
# ssh-keygen -t rsa
上面命令一路回車, 此時(shí)在/root/.ssh/目錄下生成了2個(gè)文件,id_rsa為私鑰,id_rsa.pub為公鑰。
私鑰自己下載到本地電腦妥善保存(丟了服務(wù)器可就沒法再登陸了),為安全,建議刪除服務(wù)器端的私鑰。公鑰則可以任意公開。

使用以下命令將公鑰導(dǎo)入到系統(tǒng)中:
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys

2)  修改SSH的配置文件/etc/ssh/sshd_config 
# vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys

#默認(rèn)PasswordAuthentication 為yes,即允許密碼登錄,改為no后,禁止密碼登錄
PasswordAuthentication no

3)  重啟SSH服務(wù)
# /etc/init.d/sshd restart

4)  使用私鑰登錄xshell或securecrt客戶端了

########  SSH服務(wù)啟動(dòng)報(bào)錯(cuò)案例  ########
在某臺服務(wù)器上部署了sftp服務(wù),最后發(fā)現(xiàn)sftp遠(yuǎn)程登錄正常,但是ssh遠(yuǎn)程登錄失?。ūM管已經(jīng)輸入了正確的用戶名和密碼)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@kevin ssh]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd:/etc/ssh/sshd_config line 81: Unsupported option GSSAPIAuthentication
/etc/ssh/sshd_config line 83: Unsupported option GSSAPICleanupCredentials
Starting sshd: [ OK ]
如上啟動(dòng)后,遠(yuǎn)程ssh登錄這臺機(jī)器,輸入正確的用戶名和密碼,則會登錄失敗??!
[root@kevin ssh]# ssh -V
OpenSSH_7.6p1, OpenSSL 1.0.1e-fips 11 Feb 2013
原因是新版本的openssh不支持以上參數(shù),需要修改sshd的配置文件。
修改內(nèi)容如下,否則還是無法通過ssh登錄這臺服務(wù)器:
[root@kevin ssh]# vim /etc/ssh/sshd_config
.......
##去掉前面的注釋,允許root通過ssh登錄
PermitRootLogin yes
##注釋掉下面三個(gè)參數(shù)
#GSSAPIAuthentication yes
#GSSAPICleanupCredentials yes
#UsePAM yes
再次重啟ssh,上面的報(bào)錯(cuò)信息就沒有了。此時(shí)遠(yuǎn)程ssh登錄就OK了!
[root@kevin ssh]# service sshd restart
Stopping sshd: [ OK ]
Starting sshd: [ OK ]

########  SSH連接超時(shí)時(shí)間(timed out)設(shè)置  ########

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
1)使用下面命令連接,可以減少ssh連接超時(shí)等待的時(shí)間
# ssh -o ConnectTimeout=5 -p22 root@172.16.60.20
或者修改sshd_config文件里面的UseDNS 選項(xiàng),改為UseDNS no
2)設(shè)置SSH超時(shí)時(shí)間的方法
# vim /root/.bash_profile   
export TMOUT=1000000     #以秒為單位。或者修改/etc/profile文件也可以。
# source /root/.bash_profile
# vim /etc/ssh/sshd_config
ClientAliveInterval=60
# service sshd restart
意思是每過一分鐘,sshd都會和ssh client打個(gè)招呼 (即服務(wù)器端給客戶端發(fā)送一個(gè)'空包'),檢測它是否存在,如果不存時(shí)則斷開連接!
這里需要注意: 設(shè)置完成后,要退出ssh遠(yuǎn)程連接,再次登錄后才可以生效。因?yàn)橐僮x取一次~/bash_profile文件。
總結(jié):
在ClientAliveInterval(/etc/ssh/sshd_config)、環(huán)境變量TMOUT(在/etc/profile或.bash_profile中設(shè)置)以及putty的'Seconds between keepalives'(默認(rèn)為0)這些設(shè)置方法中,
經(jīng)檢測驗(yàn)證,只有TMOUT可以控制ssh連接在空閑時(shí)間超時(shí),自動(dòng)斷開連接的時(shí)間,數(shù)字單位為'秒'。在設(shè)置了TMOUT后(非0),另外兩個(gè)變量則不起作用的。
另外,特別提醒的是,設(shè)置好ssh的登錄超時(shí)時(shí)間以后,記得退出重新登錄或重啟系統(tǒng),以使配置生效。
3)SSH禁止超時(shí)設(shè)置
SSH默認(rèn)過一段時(shí)間會超時(shí),有時(shí)候正在執(zhí)行著腳本,出去一會回來就斷開了,輸出信息都看不到了,很是無奈!
其實(shí)禁止SSH自動(dòng)超時(shí)最簡單的辦法就是:每隔一段時(shí)間在客戶端和服務(wù)器之間發(fā)送一個(gè)'空包'!?。。?!
至于到底是從客戶端發(fā)給服務(wù)器,還是服務(wù)器發(fā)給客戶端其實(shí)都不重要,重要的是需要它們之間要有通信。
下面介紹兩種阻止SSH連接超時(shí)的方法(推薦方法二):
方法一:客戶端阻止SSH超時(shí)
編輯本地的SSH配置文件:~/.ssh/config
# vim ~/.ssh/config
ServerAliveInterval 120
這個(gè)設(shè)置會讓客服端機(jī)器在使用SSH連接服務(wù)器時(shí),每隔120秒給服務(wù)器發(fā)送一個(gè)'空包',保持它們之間的連接。
方法二:服務(wù)器端阻止SSH超時(shí)
如果有服務(wù)器端的root權(quán)限,可以在服務(wù)端進(jìn)行配置,這樣就不需要每個(gè)客戶端都單獨(dú)配置。
# vim /etc/ssh/sshd_config
ClientAliveInterval 120
ClientAliveCountMax 720
第一行,表示每隔120秒向客戶端發(fā)送一個(gè)'空包',以保持于客戶端的連接。
第二行,表示總共發(fā)送720次'空包',之后斷開它們之間的連接,也就是:120秒 × 720 = 86400 秒 = 24小時(shí) 后。
最后重啟sshd服務(wù),再打開新終端進(jìn)行ssh連接就可以了,在24小時(shí)內(nèi)不會出現(xiàn)連接超時(shí)。
# /etc/init.d/ssh restart

######## SSH公鑰下發(fā)無效 ########
ssh的.pub公鑰已經(jīng)拷貝到遠(yuǎn)程主機(jī)的.ssh/authorized_keys文件里,但是ssh跳轉(zhuǎn)時(shí),仍然要輸入密碼!!即公鑰下發(fā)后,ssh信任關(guān)系沒有生效!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
解決辦法:
1)遠(yuǎn)程主機(jī)對應(yīng)用戶家目錄下的.ssh目錄必須是700或755權(quán)限,絕不能是775或777權(quán)限!即只對該用戶有寫權(quán)限!(一般設(shè)置700權(quán)限)
2)遠(yuǎn)程主機(jī)對應(yīng)用戶家目錄下的.ssh/authorized_keys文件權(quán)限必須是600權(quán)限!即只對該用戶有寫權(quán)限!(一般設(shè)置600權(quán)限)
3)遠(yuǎn)程主機(jī)對應(yīng)用戶家目錄的權(quán)限必須是700或755權(quán)限,絕不能是775或777權(quán)限!即只對該用戶有寫權(quán)限!(一般設(shè)置700權(quán)限),大多數(shù)情況下都是由于這個(gè)原因?qū)е碌模。。?/code>
  
如果.ssh目錄和.ssh/authorized_keys文件權(quán)限對別的用戶有寫權(quán)限,則就會導(dǎo)致ssh認(rèn)證失敗!
=====================================================================================================
例如在一次ansible自動(dòng)化部署中,之前配置好的ssh信任關(guān)系失效,報(bào)錯(cuò)如下:
{'changed': false, 'msg': 'SSH Error: data could not be sent to remote host \'172.16.60.240\'. Make sure this host can be reached over ssh', 'unreachable': true}
查看現(xiàn)象,發(fā)現(xiàn)之前配置好的ssh信任關(guān)系失效了?。?/code>
[root@bz3devjenci1002 lx0319]# ssh -p22 kevin@172.16.60.240          
Authorized only. All activity will be monitored and reported
kevin@172.16.60.240's password:
分析原因及解決辦法:
登錄172.16.60.240這臺機(jī)器的kevin用戶下,發(fā)現(xiàn)authorized_keys文件里確實(shí)已經(jīng)傳入了ansible主節(jié)點(diǎn)的id_rsa.pub公鑰內(nèi)容,并且下面兩個(gè)權(quán)限都正確:
[kevin@bz4autestap1002 ~]$ ll -d .ssh
drwx------ 2 kevin kevin 4096 Jul 24 10:48 .ssh         #700權(quán)限是正確的
[kevin@bz4autestap1002 ~]$ ll .ssh/authorized_keys
-rw------- 1 kevin kevin 2412 Jul 24 10:45 .ssh/authorized_keys     #600權(quán)限也是正確的
然后查看kevin用戶目錄權(quán)限,發(fā)現(xiàn)是777!這才是問題根源!該用戶目錄權(quán)限不能對別的用戶有寫權(quán)限,否則會造成ssh認(rèn)證失?。?/code>
[kevin@bz4autestap1002 ~]$ ll -d /home/kevin
drwxrwxrwx 14 kevin kevin 4096 Jul 24 10:48 /home/kevin
修改為600權(quán)限即可
[kevin@bz4autestap1002 ~]$ chmod 600 /home/kevin
[kevin@bz4autestap1002 ~]$ ll -d /home/kevin
drwx------ 14 kevin kevin 4096 Jul 24 10:48 /home/kevin
再次在遠(yuǎn)程嘗試ssh認(rèn)證跳轉(zhuǎn)
[root@bz3devjenci1002 lx0319]# ssh -p22 kevin@172.16.60.240 
[kevin@bz4autestap1002 ~]$

########  Centos7修改ssh默認(rèn)端口的方法  ########

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
CentOS 7 對于防火墻這一塊的設(shè)置有一定的修改,修改ssh端口后,必須關(guān)閉防火墻和selinux之后才能正常重啟sshd服務(wù),否則啟動(dòng)失敗。操作記錄如下:
1)修改/etc/ssh/sshd_config                         #這個(gè)是修改ssh服務(wù)端配置文件。
[root@k8s-master01 ~]# vim /etc/ssh/sshd_config
.........
#Port 22         #這行最好去掉#號,防止配置失效以后不能遠(yuǎn)程登錄,還得去機(jī)房修改,等修改以后的端口能使用以后在注釋掉
Port 6666       #下面添加這一行
[root@k8s-master01 ~]# vim /etc/ssh/ssh_config    #這個(gè)是修改ssh客戶端配置文件,一般可以不用修改。
........
#   Port 22
    Port 6666
======================================================================================================
ssh客戶端配置文件使用場景:
比如A機(jī)器的/etc/ssh/ssh_config客戶端配置文件的ssh端口是22,B機(jī)器的/etc/ssh/sshd_config服務(wù)端配置文件是6666
那么A機(jī)器ssh連接B機(jī)器時(shí)就要帶上'-p6666', 如果A機(jī)器的ssh客戶端配置文件的端口也是6666的話,就可以直接ssh連接B機(jī)器了。
======================================================================================================
2)要關(guān)閉防火墻和selinux。否則,centos7修改ssh端口后會啟動(dòng)sshd服務(wù)失?。∫欢ㄒ⒁膺@個(gè)!
[root@k8s-master01 ~]# systemctl disable firewalld
[root@k8s-master01 ~]# systemctl stop firewalld
[root@k8s-master01 ~]# firewall-cmd --state
not running
[root@k8s-master01 ~]# cat /etc/sysconfig/selinux
.......
SELINUX=disabled
[root@k8s-master01 ~]# setenforce 0
[root@k8s-master01 ~]# getenforce
Disabled
這樣,在修改ssh端口后,就能順利啟動(dòng)sshd服務(wù)了!
======================================================================================================
這里還需要注意下:如果是打開了防火墻或selinux,則需要將修改的sshd端口添加到對應(yīng)的防火墻規(guī)則中(默認(rèn)只加了ssh的22端口)
a)firewalld配置
添加到防火墻:
# firewall-cmd --zone=public --add-port=6666/tcp --permanent (permanent是保存配置,不然下次重啟以后這次修改無效)
重啟:
#firewall-cmd --reload
查看添加端口是否成功,如果添加成功則會顯示yes,否則no
# firewall-cmd --zone=public --query-port=6666/tcp
b)selinux配置
使用以下命令查看當(dāng)前SElinux 允許的ssh端口:
# semanage port -l | grep ssh
添加6666端口到 SELinux
# semanage port -a -t ssh_port_t -p tcp 6666
然后確認(rèn)一下是否添加進(jìn)去
# semanage port -l | grep ssh
如果成功會輸出
ssh_port_t                    tcp    6666, 22
c)然后就可以順利啟動(dòng)sshd服務(wù)了。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多