對于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
(0)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
(1)ssh遠(yuǎn)程登陸后的提示信息,標(biāo)題信息
我們經(jīng)常會(huì)使用中控機(jī)ssh信任跳轉(zhuǎn)到其他機(jī)器上,但是不知道有沒有運(yùn)維朋友注意到ssh跳轉(zhuǎn)成功后的終端顯示的提示信息?
這些提示信息,是為了方便我們在第一時(shí)間知道ssh跳轉(zhuǎn)到哪臺(tái)目標(biāo)機(jī)上,也是為了避免長期頻繁跳轉(zhuǎn)后由于大意造成的誤入機(jī)器操作的風(fēng)險(xiǎn),我們通常會(huì)在ssh跳轉(zhuǎn)到目標(biāo)機(jī)器后顯示一些提示信息,在一些國家, 登入給定系統(tǒng)前, 給出未經(jīng)授權(quán)或者用戶監(jiān)視警告信息, 將會(huì)受到法律的保護(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ī)
===================================
那么上面紅色區(qū)域的提醒信息是在哪設(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 ~]#
(2)實(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)回車
這樣就會(huì)在當(dāng)前用戶家目錄下的.ssh目錄里產(chǎn)生公鑰和私鑰文件:id_rsa.pub、id_rsa。可以將id_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ī)器]
也可以不加公鑰路徑,會(huì)默認(rèn)加上
#ssh-copy-id user@ip
注意: ssh-copy-id 將key寫到遠(yuǎn)程機(jī)器的 ~/ .ssh/authorized_key.文件(文件會(huì)自動(dòng)創(chuàng)建)中
1、對于非22端口(比如22222)情況下的ssh-copy-id的使用,需要這樣用:
2、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
(3)ssh登錄失敗,報(bào)錯(cuò):Pseudo-terminal will not be allocated because stdin
現(xiàn)象:
需要登錄線上的一臺(tái)目標(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"
(4)ssh遠(yuǎn)程登陸緩慢問題
解決辦法:
編譯/etc/ssh/sshd_config配置文件:
UseDNS no
GSSAPIAuthentication no
然后重啟sshd服務(wù)即可!
(5)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ù)即可!
(6)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ù)。
(7)ssh連接超時(shí)被踢出問題解決
當(dāng)使用xshell,SecureCRT等客戶端訪問linux服務(wù)器,有時(shí)候會(huì)出現(xiàn)終端定期超時(shí)被踢出的情況。
下面介紹三種方法來防止超時(shí)被踢出的方法,后兩種情況的設(shè)置方法以及通過設(shè)置shell變量來達(dá)到此目的的方法:
1、 配置服務(wù)器
#vi /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)斷開. 正常情況下, 客戶端不會(huì)不響應(yīng).
重新加載sshd服務(wù)。退出客戶端,再次登陸即可驗(yàn)證。
3)重啟sshd service
sudo /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.
(8)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)了問題,打算重裝這臺(tái)機(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)失敗,依然會(huì)繼續(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ù)端會(huì)用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í)的速度.
(9)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)只允許指定用戶進(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`
**================================================================**
**除了上面的方法可以限制ssh指定用戶登錄外,還可以使用pam規(guī)則進(jìn)行設(shè)置。**
`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)行賬號鎖定。
https://www.cnblogs.com/kevingrace/p/6109818.html
5)取消密碼驗(yàn)證,只用密鑰對驗(yàn)證
修改ssh服務(wù)配置文件/etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
6)給賬號設(shè)置強(qiáng)壯的密碼:將密碼保存到文本進(jìn)行復(fù)制和粘帖就可以了
# rpm -ivh expect-5.43.0-5.1.i386.rpm| yum -y install expect
# mkpasswd -l 128 -d 8 -C 15 -s 10 //將下面密碼保存到文本進(jìn)行復(fù)制、粘貼即可
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針對客戶端的配置文件:
`[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è)置是否在這臺(tái)計(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``將不會(huì)自動(dòng)把計(jì)算機(jī)的密匙加入``"$HOME/.ssh/known_hosts"``文件,且一旦計(jì)算機(jī)的密匙發(fā)生了變化,就拒絕連接。`
`IdentityFile ~/.``ssh``/identity`
`"IdentityFile"``設(shè)置讀取用戶的RSA安全驗(yàn)證標(biāo)識(shí)。`
`Port 22`
`"Port"``設(shè)置連接到遠(yuǎn)程主機(jī)的端口,``ssh``默認(rèn)端口為22。`
`Cipher blowfish`
`“Cipher”設(shè)置加密用的密鑰,blowfish可以自己隨意設(shè)置。`
`EscapeChar ~`
`“EscapeChar”設(shè)置escape字符。`
`======================================================
`比如說,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端口了。`
centos7下修改ssh默認(rèn)的22端口后,出現(xiàn)重啟ssh失敗的現(xiàn)象。可能原因:
selinux沒有關(guān)閉
# setenforce 0
# sed -i 's/SELINUX=enforcing/SELINUX=disabled' /etc/sysconfig/selinux
# reboot
修改ssh端口后,遠(yuǎn)程ssh連接不上。可能原因:
firewalld防火墻沒有關(guān)閉,默認(rèn)的22端口是開啟的,如果防火墻沒有關(guān)閉,則ssh修改后的新端口是不通的。
# systemctl stop firewalld
# systemctl disable firewalld
# firewall-cmd --state
**-------------------------------------------去掉SSH公鑰檢查的方法(交互式y(tǒng)es/no)------------------------------------------------**
SSH公鑰檢查是一個(gè)重要的安全機(jī)制,可以防范中間人劫持等黑客攻擊。但是在特定情況下,嚴(yán)格的 SSH 公鑰檢查會(huì)破壞一些依賴SSH協(xié)議的自動(dòng)化任務(wù),就需要一種手段能夠繞過SSH的公鑰檢查。
SSH連接遠(yuǎn)程主機(jī)時(shí),會(huì)檢查主機(jī)的公鑰。如果是第一次連接該主機(jī),會(huì)顯示該主機(jī)的公鑰摘要,彈出公鑰確認(rèn)的提示,提示用戶是否信任該主機(jī)(Yes/no)。當(dāng)選擇Yes接受,就會(huì)將該主機(jī)的公鑰追加到文件 ~/.ssh/known_hosts 中。當(dāng)再次連接該主機(jī)時(shí),就不會(huì)再提示該問題了。
SSH公鑰檢查有好處,但首次連接時(shí)會(huì)導(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
**====================ansible中取消ssh交換式y(tǒng)es/no==================**
配置文件/etc/ansible/ansible.cfg的[defaults]中(打開注釋)
# uncomment this to disable SSH key host checking
host_key_checking = False
**=========================**設(shè)置終端登錄超時(shí)時(shí)間**====================**
`遠(yuǎn)程登錄linux服務(wù)器,如何設(shè)置終端失效時(shí)間(即過了多久不操作,終端即將失效)。方法如下:`
`[root@mq-console-nameserver ~]`# vim /etc/profile`
`......`
`export` `TMOUT=600`
`[root@mq-console-nameserver ~]``# source /etc/profile`
`如上設(shè)置后,登錄這臺(tái)服務(wù)器的終端在10分鐘內(nèi)不做操作,則該終端就將失效!`
**=======================**SSH服務(wù)啟動(dòng)報(bào)錯(cuò)案例**=======================**
在某臺(tái)服務(wù)器上部署了sftp服務(wù),最后發(fā)現(xiàn)sftp遠(yuǎn)程登錄正常,但是ssh遠(yuǎn)程登錄失敗(盡管已經(jīng)輸入了正確的用戶名和密碼)。
`[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``登錄這臺(tái)機(jī)器,輸入正確的用戶名和密碼,則會(huì)登錄失敗??!`
`[root@kevin ``ssh``]``# ssh -V`
`OpenSSH_7.6p1, OpenSSL 1.0.1e-fips 11 Feb 2013`
`原因是新版本的openssh不支持以上參數(shù),需要修改sshd的配置文件。`
`修改內(nèi)容如下,否則還是無法通過``ssh``登錄這臺(tái)服務(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 ]`
***************當(dāng)你發(fā)現(xiàn)自己的才華撐不起野心時(shí),就請安靜下來學(xué)習(xí)吧***************