SSH 為建立在應(yīng)用層和傳輸層基礎(chǔ)上的安全協(xié)議睡腿。SSH 是目前較可靠语御,專為遠(yuǎn)程登錄會(huì)話和其他網(wǎng)絡(luò)服務(wù)提供安全性的協(xié)議。利用SSH 協(xié)議可以有效防止遠(yuǎn)程管理過程中的信息泄露問題席怪。
從客戶端來看应闯,SSH提供兩種級(jí)別的安全驗(yàn)證:
1、基于口令的驗(yàn)證
只要知道帳號(hào)和口令挂捻,就可以登錄到遠(yuǎn)程主機(jī)碉纺。所有傳輸?shù)臄?shù)據(jù)都會(huì)被加密,但缺點(diǎn)是:不能保證你正在連接的服務(wù)器就是你想連接的服務(wù)器。連接過程如下
當(dāng)?shù)谝淮捂溄舆h(yuǎn)程主機(jī)時(shí)骨田,會(huì)提示您當(dāng)前主機(jī)的”公鑰指紋”耿导,詢問您是否繼續(xù),如果選擇繼續(xù)后就可以輸入密碼進(jìn)行登錄了态贤,當(dāng)遠(yuǎn)程的主機(jī)接受以后舱呻,該臺(tái)服務(wù)器的公鑰就會(huì)保存到~/.ssh/known_hosts文件中
2、基于密鑰的驗(yàn)證
這種驗(yàn)證的前提是客戶端需要生成一對(duì)密鑰悠汽,將公鑰放到需訪問的遠(yuǎn)程服務(wù)器箱吕。這種驗(yàn)證比上一種的好處是,不能仿冒真正的服務(wù)器柿冲,因?yàn)橐旅氨仨毮玫娇蛻舳松傻墓€茬高。缺點(diǎn)就是驗(yàn)證等待過程稍長(zhǎng)些。
如何生成密鑰:
- 在客戶端打開終端假抄,執(zhí)行ssh-keygen怎栽,該命令會(huì)默認(rèn)在~/.ssh/目錄下創(chuàng)建id_rsa、id_rsa.pub兩個(gè)文件宿饱,分別為您的公鑰和私鑰
- 將公鑰id_rsa.pub文件拷貝到服務(wù)器端的~/.ssh/authorized_keys文件中婚瓜,有三種方法:
- 通過scp拷貝,例:scp -P 22 ~/.ssh/id_rsa.pub user@host:~/authorized_keys #可選參數(shù)-P代表指定用端口號(hào)22
- 通過ssh-copyid程序,例:ssh-copy-id -i 絕對(duì)路徑/file_name 目標(biāo)主機(jī)IP #此種方式簡(jiǎn)單刑棵,不需追加改文件名,但不能指定端口號(hào)愚铡,默認(rèn)以22端口而且需要輸入密碼
- 通過cat方法: 例:cat ~/.ssh/id_rsa.pub | ssh -p 22 user@host ‘cat >> ~/.ssh/authorized_keys’
原理圖如下:
SSH遠(yuǎn)程密碼登錄原理.png
圖解蛉签,server A免登錄到server B:
1.在A上生成公鑰私鑰。
2.將公鑰拷貝給server B沥寥,要重命名成authorized_keys(從英文名就知道含義了)
3.Server A向Server B發(fā)送一個(gè)連接請(qǐng)求碍舍。
4.Server B得到Server A的信息后,在authorized_key中查找邑雅,如果有相應(yīng)的用戶名和IP片橡,則隨機(jī)生成一個(gè)字符串,并用Server A的公鑰加密淮野,發(fā)送給Server A捧书。
5.Server A得到Server B發(fā)來的消息后,使用私鑰進(jìn)行解密骤星,然后將解密后的字符串發(fā)送給Server B经瓷。Server B進(jìn)行和生成的對(duì)比,如果一致洞难,則允許免登錄舆吮。
總之:A要免密碼登錄到B,B首先要擁有A的公鑰,然后B要做一次加密驗(yàn)證色冀。對(duì)于非對(duì)稱加密潭袱,公鑰加密的密文不能公鑰解開,只能私鑰解開锋恬。
實(shí)際操作
#生成密鑰對(duì),t參數(shù)指定加密方式rsa,回車3次
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
eb:38:2d:a0:9e:3d:93:95:a2:52:ec:eb:0b:60:65:44 root@localhost.localdomain
The key's randomart image is:
+--[ RSA 2048]----+
| .E |
| . |
| o |
| o |
|.o .S |
|o o o o . |
|.o o = .. |
|..+o+ oo. |
| +*o.o.o. |
+-----------------+
#查看密鑰存放的目錄
[root@localhost ~]# ll /root/.ssh/
總用量 8
-rw------- 1 root root 1675 12月 19 15:16 id_rsa # 私鑰自留
-rw-r--r-- 1 root root 408 12月 19 15:16 id_rsa.pub #公鑰拷貝給目標(biāo)主機(jī)
#傳送公鑰給目標(biāo)主機(jī)需要輸入密碼
[root@localhost ~]# ssh-copy-id -i /root/.ssh/id_rsa.pub 192.168.15.150
The authenticity of host '192.168.15.150 (192.168.15.150)' can't be established.
RSA key fingerprint is 76:72:55:b7:3f:e1:8b:6d:8d:d7:50:fb:d5:27:bb:c1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.15.150' (RSA) to the list of known hosts.
Now try logging into the machine, with "ssh '192.168.15.150'", and check in:
.ssh/authorized_keys
to make sure we haven't added extra keys that you weren't expecting.
#SSH免密設(shè)置成功,可以直接在本機(jī)獲取遠(yuǎn)程主機(jī)的參數(shù),ssh -l user_name IP "command"
[root@localhost ~]# ssh -l root 192.168.15.150 "df -h"
Filesystem Size Used Avail Use% Mounted on
/dev/sda5 58G 3.7G 52G 7% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 194M 30M 155M 17% /boot
/dev/sda2 20G 5.7G 14G 31% /data
[root@localhost ~]# ssh -l root 192.168.15.150 "ifconfig"
eth0 Link encap:Ethernet HWaddr 00:0C:29:BA:80:B0
inet addr:192.168.15.150 Bcast:192.168.15.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:feba:80b0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:661 errors:0 dropped:0 overruns:0 frame:0
TX packets:348 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:75506 (73.7 KiB) TX bytes:54018 (52.7 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:12 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:840 (840.0 b) TX bytes:840 (840.0 b)
服務(wù)主配置
服務(wù)主配置文件一般保存服務(wù)的主要參數(shù)屯换,一般路徑/etc/soft/soft.conf
普通配置文件一般是由主配置文件調(diào)用
[root@localhost ssh]# vim sshd_config
17 #Port 22 #默認(rèn)端口號(hào)
48 #PermitRootLogin yes #允許超級(jí)管理員登錄,取消注釋改為no,root用戶無法遠(yuǎn)程登錄
77 #PermitEmptyPasswords no #允許空密碼登錄,no不允許
78 PasswordAuthentication yes #允許通過密碼登錄
#重啟ssh服務(wù)
[root@localhost ssh]# systemctl restart sshd
備注:特殊情況主機(jī)上保存了對(duì)方主機(jī)過期的公鑰文件或者因?yàn)閮?nèi)網(wǎng)IP沖突,不同服務(wù)器使用同一個(gè)IP,導(dǎo)致前后公鑰信息有差異無法發(fā)送公鑰文件到目標(biāo)主機(jī)
一般公鑰信息都保存在文件/root/.ssh/known_hosts
中伶氢,可以手動(dòng)進(jìn)文件刪除相關(guān)信息或直接清空文件
但這可能會(huì)影響到其他主機(jī)的公鑰文件
可以使用ssh-keygen
來刪除指定IP的公鑰文件
ssh-key-gen -R 172.16.10.22