構建SSH遠程登錄管理-密碼認證-免密登錄

構建SSH遠程管理

---------SSH服務器-------------Client--------- 

            192.168.1.1           192.168.1.100

一、密碼驗證
root@localhost ~]# vi /etc/ssh/sshd_config 修改:
Port 22
Protocol 2
ListenAddress 192.168.1.1
UseDNS no

PermitRootLogin no

PermitEmptyPasswords no

LoginGraceTime 2m

MaxAuthTries 6

AllowUsers hehe [email protected] 客戶端驗證:
[root@localhost 桌面]# ssh 192.168.1.1 [root@localhost 桌面]# ssh [email protected] [root@localhost 桌面]# ssh [email protected] [root@localhost 桌面]# ssh 
[email protected]

 

二、祕鑰對驗證
例如:
ssh-keygen -b 4096 -t dsa

客戶端:

[root@localhost ~]#ssh-keygen
[root@localhost ~]#ssh-copy-id -i /home/hehe/.ssh/id_rsa.pub [email protected] 

注意:ssh-copy-id:把密鑰追加到遠程主機的 .ssh/authorized_key

[root@localhost ~]#ssh [email protected] 

或者

[hehe@localhost .ssh]$ ssh-keygen

[hehe@localhost .ssh]$ scp id_rsa.pub [email protected]:/root/

注意:在上傳公鑰時,不要關閉密碼驗證,否則將無法上傳。


服務器端:
[root@localhost ~]# vim /etc/ssh/sshd_config
修改:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
[root@localhost ~]#cp /root/id_rsa.pub /root/.ssh/authorized_keys

增加其他用戶

[root@localhost ~]#cat id_rsa.pub >> .ssh/authorized_keys 

[root@localhost ~]# service sshd restart

客戶端驗證:
[hehe@localhost .ssh]$ ssh [email protected] 結論:不使用密碼。而是使用祕鑰對驗證登錄。 

 

思考:如果客戶端lisi用戶,把公鑰拷貝到了服務端han用戶下。將會怎麼樣?

lisi用戶ssh [email protected]時無需密碼)

結論希望哪個用戶免密碼就拷貝到哪個用戶。

 

講解scp命令

1、本地--->>>---服務器(類似上傳)
文件:
[root@localhost ~]# scp 222.txt [email protected]:/root

目錄:
[root@localhost ~]# scp -r /root/hehe [email protected]:/root

2、服務器--->>>---本地(類似下載)
文件:
[root@localhost ~]# scp [email protected]:/root/222.txt ./ 

目錄:
[root@localhost ~]# scp -r [email protected]:/root/hehe ./ 


---------------增加sftp-----------------

查看openssh的版本

# ssh -V   

使用ssh -V 命令來查看openssh的版本,版本必須大於4.8p1,低於的這個版本需要升級。

 

創建sftp組

# groupadd sftp 

 

創建一個sftp用戶,用戶名爲mysftp密碼爲mysftp

修改用戶密碼和修改Linux用戶密碼是一樣的。

/bin/false是最嚴格的禁止login選項,一切服務都不能用,而/sbin/nologin只是不允許系統login,可以使用其他ftp等服務

如果想要用false在禁止login的同時允許ftp,則必須在/etc/shells裏增加一行/bin/false。

# useradd -g sftp -s /bin/false mysftp  //用戶名
# passwd 
mysftp  //密碼


sftp組的用戶的home目錄統一指定到/data/sftp下,按用戶名區分,這裏先新建一個mysftp目錄,然後指定mysftp的home爲/data/sftp/mysftp

# mkdir -p /data/sftp/mysftp  
# usermod -d /data/sftp/mysftp mysftp  

 

配置sshd_config
文本編輯器打開 /etc/ssh/sshd_config
vim /etc/ssh/sshd_config
找到如下這行,用#符號註釋掉,大致在文件末尾處。
# Subsystem      sftp    /usr/libexec/openssh/sftp-server  

增加

 Subsystem       sftp    internal-sftp    
 Match Group sftp    
 ChrootDirectory /data/sftp/%u    
 ForceCommand    internal-sftp    
 AllowTcpForwarding no    
 X11Forwarding no  

 

設定Chroot目錄權限

# chown root:sftp /data/sftp/mysftp

# chmod 755 /data/sftp/mysftp

 

建立SFTP用戶登入後可寫入的目錄

照上面設置後,在重啓sshd服務後,用戶mysftp已經可以登錄。但使用chroot指定根目錄後,根應該是無法寫入的,所以要新建一個目錄供mysftp上傳文件。這個目錄所有者爲mysftp,所有組爲sftp,所有者有寫入權限,而所有組無寫入權限。命令如下:

# mkdir /data/sftp/mysftp/upload  
# chown mysftp:sftp /data/sftp/mysftp/upload  
# chmod 755 /data/sftp/mysftp/upload  

 

# setenforce 0  

 

# service sshd restart

 

# sftp [email protected]  

sftp>cd upload

sftp>put /etc/ntp.conf

 

禁止本地用戶使用sftp登錄。

vim /etc/ssh/sshd_config

增加:(注意不可在Match Group sftp 下方任何位置

DenyUsers meng

 

------------------------------------------

yum install xinetd

 

# vim /etc/hosts.deny 

sshd:192.168.56.201

# vim /etc/hosts.allow

sshd:192.168.56.201

 

/etc/init.d/xinetd restart

 

什麼是xinetd
extended internet daemon
xinetd是新一代的網絡守護進程服務程序,又叫超級Internet服務器,常用來管理多種輕量級Internet服務。

xinetd的缺點
當前最大的缺點是對RPC支持的不穩定,但是可以啓動protmap,使它與xinetd共存來解決這個問題。

xinetd的調優和解釋:

現在就安裝並重啓完成了xinetd服務。
或者使用如下命令重啓:
# /etc/init.d/xinetd restart
1) /etc/xinetd.conf
xinetd 的配置文件是/etc/xinetd.conf,但是它只包括幾個默認值及/etc/xinetd.d目錄中的配置文件。如果要啓用或禁用某項 xinetd服務,編輯位於/etc/xinetd.d目錄中的配置文件。例如,disable屬性被設爲yes,表示該項服務已禁用;disable屬性被設爲no,表示該項服務已啓用。/etc/xinetd.conf有許多選項,下面是RHEL 4.0/etc/xinetd.conf
# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances             = 60
log_type               = SYSLOG authpriv
log_on_success       = HOST PID
log_on_failure       = HOST
cps                   = 25 30
}
includedir /etc/xinetd.d
— instances = 60:表示最大連接進程數爲60個。
— log_type = SYSLOG authpriv:表示使用syslog進行服務登記。
— log_on_success= HOST PID:表示設置成功後記錄客戶機的IP地址的
進程ID
— log_on_failure = HOST:表示設置失敗後記錄客戶機的IP地址。
— cps = 25 30:表示每秒25個入站連接,如果超過限制,則等待30秒。主要用於對付拒絕服務***。
— includedir /etc/xinetd.d:表示告訴xinetd要包含的文件或目錄是/etc/xinetd.d
2) /etc/xinetd.d/*
下面以/etc/xinetd.d/中的一個文件(rsync)爲例。
service rsync
{
disable = yes
socket_type      = stream
wait              = no
user              = root
server           = /usr/bin/rsync
log_on_failure += USERID
}
下面說明每一行選項的含義:
— disable = yes:表示禁用這個服務。
— socket_type = stream:表示服務的數據包類型爲stream
— wait = no:表示不需等待,即服務將以多線程的方式運行。
— user = root:表示執行此服務進程的用戶是root
— server = /usr/bin/rsync:啓動腳本的位置。
— log_on_failure += USERID:表示設置失敗時,UID添加到系統登記表。

6、 配置xinetd
1) 格式
/etc/xinetd.conf中的每一項具有下列形式:
service service-name
{
……

}
其中service是必需的關鍵字,且屬性表必須用大括號括起來。每一項都定義了由service-name定義的服務。
service-name是任意的,但通常是標準網絡服務名,也可增加其他非標準的服務,只要它們能通過網絡請求激活,包括localhost自身發出的網絡請求。有很多可以使用的屬性,稍後將描述必需的屬性和屬性的使用規則。
操作符可以是=+=-=。所有屬性可以使用=,其作用是分配一個或多個值,某些屬性可以使用+=-=,其作用分別是將其值增加到某個現存的值表中,或將其值從現存值表中刪除。
2) 配置文件
相關的配置文件如下:
/etc/xinetd.conf
/etc/xinetd.d/*                                       //該目錄下的所有文件
/etc/hosts.allow
/etc/hosts.deny
3) disabledenabled
前者的參數是禁用的服務列表,後者的參數是啓用的服務列表。他們的共同點是格式相同(屬性名、服務名列表與服務中間用空格分開,例如disabled = in.tftpd in.rexecd),此外,它們都是作用於全局的。如果在disabled列表中被指定,那麼無論包含在列表中的服務是否有配置文件和如何設置,都將被禁用;如果enabled列表被指定,那麼只有列表中的服務纔可啓動,如果enabled沒有被指定,那麼disabled指定的服務之外的所有服務都可以啓動。
4) 注意問題
 在重新配置的時候,下列的屬性不能被改變:socket_typewaitprotocoltype
 如果only_fromno_access屬性沒有被指定(無論在服務項中直接指定還是通過默認項指定),那麼對該服務的訪問IP將沒有限制;
 地址校驗是針對IP地址而不是針對
域名地址
6  xinetd防止拒絕服務***(Denial of Services)的原因
xinetd能有效地防止拒絕服務***(Denial of Services)的原因如下。
1) 限制同時運行的進程數
通過設置instances選項設定同時運行的併發進程數:
instances20
當服務器被請求連接的進程數達到20個時,xinetd將停止接受多出部分的連接請求。直到請求連接數低於設定值爲止。
2) 限制一個IP地址的最大連接數
通過限制一個主機的最大連接數,從而防止某個主機獨佔某個服務。
per_source5
這裏每個IP地址的連接數是5個。
3) 限制日誌文件大小,防止磁盤空間被填滿
許多***者知道大多數服務需要寫入日誌。***者可以構造大量的錯誤信息併發送出來,服務器記錄這些錯誤,可能就造成日誌文件非常龐大,甚至會塞滿硬盤。同時會讓管理員面對大量的日誌,而不能發現***者真正的***途徑。因此,限制日誌文件大小是防範拒絕服務***的一個方法。
log_type FILE.1 /var/log/myservice.log 8388608 15728640
這裏設置的日誌文件FILE.1臨界值爲8MB,到達此值時,syslog文件會出現告警,到達15MB,系統會停止所有使用這個
日誌系統的服務。
4) 限制負載
xinetd還可以使用限制負載的方法防範拒絕服務***。用一個浮點數作爲負載係數,當負載達到這個數目的時候,該服務將暫停處理後續的連接。
max_load = 2.8
上面的設定表示當一項系統負載達到2.8時,所有服務將暫時中止,直到系統負載下降到設定值以下。
說明  要使用這個選項,編譯時應加入“–with-loadavg”xinetd將處理max-load配置選項,從而在系統負載過重時關閉某些服務進程,來實現防範某些拒絕服務***。
5) 限制所有服務器數目(連接速率)
xinetd可以使用cps選項設定連接速率,下面的例子:
cps = 25 60
上面的設定表示服務器最多啓動25個連接,如果達到這個數目將停止啓動新服務60秒。在此期間不接受任何請求。
6) 限制對硬件資源的利用
通過rlimit_asrlimit_cpu兩個選項可以有效地限制一種服務對內存、中央處理器的資源佔用:
rlimit_as = 8M
rlimit_cpu=20
上面的設定表示對服務器硬件資源佔用的限制,最多可用內存爲8MBCPU每秒處理20個進程。
xinetd的一個重要功能是它能夠控制從屬服務可以利用的資源量,通過它的以上設置可以達到這個目的,有助於防止某個xinetd服務佔用大量資源,從而導致拒絕服務情況的出現。

 

 

 最後歡迎您的閱讀,本人才學疏淺,如有不足之處,望各位體諒,將問題發送到本人郵箱[email protected]!同時歡迎您加入我們的技術討論組qq羣:566121592


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章