1. ssh概述
ssh是(Secure SHell protocol) 的簡寫,安全外殼協議(SSH)是一種在不安全網絡上提供安全遠程登錄及其它安全網絡服務的協議。
2. ssh 主要功能
一個就是類似 telnet 的遠程聯機使用 shell 的服務器,即 ssh
另一個就是類似 FTP 服務的 sftp-server ,提供更安全的 FTP 服務
3. ssh 工作原理
服務器建立公鑰: 每一次啟動 sshd 服務時,該服務會主動去找 /etc/ssh/ssh_host* 的文件,若系統剛剛安裝完成時,由於沒有這些公鑰,因此 sshd 會主動去計算出這些需要的公鑰,同時也會計算出服務器自己需要的私鑰
客戶端主動聯機請求: 若客戶端想要聯機到 ssh 服務器,則需要使用適當的客戶端程序來聯機,包括 ssh, putty 等客戶端程序連接
服務器傳送公鑰給客戶端: 接收到客戶端的要求后,服務器便將第一個步驟取得的公鑰傳送給客戶端使用 (此時應是明碼傳送,反正公鑰本來就是給大家使用的)
客戶端記錄並比對服務器的公鑰數據及隨機計算自己的公私鑰: 若客戶端第一次連接到此服務器,則會將服務器的公鑰記錄到客戶端的用戶家目錄內的 ~/.ssh/known_hosts 。若是已經記錄過該服務器的公鑰,則客戶端會去比對此次接收到的與之前的記錄是否有差異。若接受此公鑰, 則開始計算客戶端自己的公私鑰
回傳客戶端的公鑰到服務器端: 用戶將自己的公鑰傳送給服務器。此時服務器:具有服務器的私鑰與客戶端的公鑰,而客戶端則是: 具有服務器的公鑰以及客戶端自己的私鑰,你會看到,在此次聯機的服務器與客戶端的密鑰系統 (公鑰+私鑰) 並不一樣,所以才稱為非對稱加密系統
開始雙向加解密: (1)服務器到客戶端:服務器傳送數據時,拿用戶的公鑰加密后送出。客戶端接收后,用自己的私鑰解密 (2)客戶端到服務器:客戶端傳送數據時,拿服務器的公鑰加密后送出。服務器接收后,用服務器的私鑰解密,這樣就能保證通信安全
4. ssh 組成
(1). ssh 協議使用的是tcp 22號端口,telnet 使用的是tcp 的23號端口,ssh協議是C/S架構,分為服務器端與客戶端。
(2). 服務器端的程序有 sshd
客戶端的程序有,Windows下 putty,SecureCRT,SSHSSH Secure Shell Client …… Linux下有,ssh
5. ssh 工具實現
OpenSSH 包括sshd主程序與ssh客戶端
6. sshd 配置文件詳解
vim /etc/ssh/sshd_config
#1. SSH Server 全局設定,port ,協議 ……
# Port 22 #默認端口,也可以使用多個端口
Protocol 2 #協議版本號
# ListenAddress 0.0.0.0 #默認值是監聽所有接口的 SSH 要求
# PidFile /var/run/sshd.pid #放置 SSHD 這個 PID 的文件
# LoginGraceTime 2m #2分鍾之內不輸入密碼,自動斷開
# Compression delayed #使用壓縮數據模式進行傳輸,登入后才將數據壓縮 (delayed)
#2. 主要私有Key 存放文件
# HostKey /etc/ssh/ssh_host_key # SSH version 1 使用的私鑰
# HostKey /etc/ssh/ssh_host_rsa_key # SSH version 2 使用的 RSA 私鑰
# HostKey /etc/ssh/ssh_host_dsa_key # SSH version 2 使用的 DSA 私鑰
#3. 關於登錄文件的數據與daemon的名稱
SyslogFacility AUTHPRIV #記錄日志/var/log/secure
# LogLevel INFO #日志等級
#4. 安全設置
# PermitRootLogin yes #是否允許 root 登入
# StrictModes yes #是否讓 sshd 去檢查用戶家目錄或相關文件的權限數據
# PubkeyAuthentication yes #使用密鑰登錄系統
# AuthorizedKeysFile .ssh/authorized_keys #用戶登錄公鑰存放位置
PasswordAuthentication yes #登錄密碼認證
# PermitEmptyPasswords no #否允許以空的密碼登入
# RhostsAuthentication no #系統不使用 .rhosts認證
# IgnoreRhosts yes #是否取消使用 ~/.ssh/.rhosts 來做為認證
# RhostsRSAAuthentication no #專門給 version 1 用的,使用 rhosts 文件在 /etc/hosts.equiv
# HostbasedAuthentication no #上面的項目類似,不過是給 version 2 使用的
# IgnoreUserKnownHosts no #是否忽略家目錄內的 ~/.ssh/known_hosts
ChallengeResponseAuthentication no #允許任何的密碼認證
UsePAM yes #利用 PAM 管理使用者認證,可以記錄與管理
#5. 登錄后項目
# PrintMotd yes #登入后是否顯示出一些信息
# PrintLastLog yes #顯示上次登入的信息
# TCPKeepAlive yes #當達成聯機后,服務器會一直傳送 TCP 封包給客戶端以判斷對方式否一直存在聯機
UsePrivilegeSeparation yes #是否權限較低的程序來提供用戶操作
MaxStartups 10 #同時允許幾個尚未登入的聯機畫面
DenyUsers * #設定受阻止的使用者名稱
DenyUsers test #阻止用戶
DenyGroups test #阻止組
#6. SFTP 設定
Subsystem sftp /usr/lib/ssh/sftp-server
# UseDNS yes #為了要判斷客戶端來源是正常合法的,因此會使用 DNS 去反查客戶端的主機名,不過在內網這項目設定為 no 會讓聯機達成速度比較快
7. sftp 講解
(1). 使用方式:sftp root@localhost
(2). sftp 支持的命令
針對遠程服務器主機 (Server) 的行為
變換目錄到 /etc/test 或其他目錄
cd /etc/test
cd PATH列出目前所在目錄下的文件名
ls
dir建立目錄
mkdir directory刪除目錄
rmdir directory顯示目前所在的目錄
pwd更改文件或目錄群組
chgrp groupname PATH更改文件或目錄擁有者
chown username PATH更改文件或目錄的權限
chmod 644 PATH
其中,644 與權限有關建立鏈接文件
ln oldname newname刪除文件或目錄
rm PATH更改文件或目錄名稱
rename oldname newname離開遠程主機
exit (or) bye (or) quit針對本機 (Client) 的行為(都加上 l, L 的小寫 )
變換目錄到本機的 PATH 當中
lcd PATH列出目前本機所在目錄下的文件名
lls在本機建立目錄
lmkdir顯示目前所在的本機目錄
lpwd針對資料上傳/下載的操作
將文件由本機上傳到遠程主機 put [本機目錄或文件] [遠程]
put [本機目錄或文件]
如果是這種格式,則文件會放置到目前遠程主機的目錄下將文件由遠程主機下載回來 get [遠程主機目錄或文件] [本機]
get [遠程主機目錄或文件]
若是這種格式,則文件會放置在目前本機所在的目錄當中!可以使用通配符,例如:
get *
get *.rpm
8. 遠程文件直接復制 scp
1
2
|
scp
[-
pr
] [-l 速率]
file
[賬號@]主機:目錄名
#上傳
scp
[-
pr
] [-l 速率] [賬號@]主機:
file
目錄名
#下載
|
選項與參數:
1
2
3
|
-p :保留原來文件的權限數據
-r :復制來源為目錄時,可以復制整個目錄 (含子目錄)
-l :可以限制傳輸的速度,單位為 Kbits
/s
,例如 [-l 800] 代表傳輸速限 100Kbytes
/s
|
案例:
12scp
/etc/hosts
* root@127.0.0.1:~
#上傳
scp
root@127.0.0.1:
/etc/bashrc
/tmp
#下載
9. ssh的認證方式
基於口令的認證:這個就不用說了,就是輸入用戶名和密碼
基於密鑰的認證,具體步驟如下
(1).客戶端建立兩把鑰匙(公鑰與私鑰)
123456ssh
-keygen [-t rsa|dsa]
#可選 rsa 或 dsa
[root@localhost ~]
# ssh-keygen #默認算法
[root@localhost ~]
# ls -l .ssh/
total 8
-rw------- 1 root root 1675 May 27 03:05 id_rsa
-rw-r--r-- 1 root root 408 May 27 03:05 id_rsa.pub
(2).將公鑰數據上傳到服務器上
scp ~/.ssh/id_rsa.pub root@192.168.1.254:~ #上傳到 root 的家目錄底下即可
(3).將公鑰放置服務器端的正確目錄與文件名(scp 或 ssh-copy-id)
方法一 scp
建立 ~/.ssh 文件,注意權限需要為 700
mkdir .ssh ; chmod 700 .ssh #權限設定中,務必是 700 且屬於使用者本人的賬號與群組才行
將公鑰內的數據使用 cat 轉存到 authorized_keys 內
cat id_rsa.pub >> .ssh/authorized_keys
chmod 644 .ssh/authorized_keys #這個檔案的權限設定中,就得要是 644 才可以
方法二 ssh-copy-id
命令格式:ssh-copy-id –i /path/to/pubkey USERNAME@ERMOTE_HOST
案例:
ssh-copy-id –i .ssh/id_rsa.pub root@192.168.1.254
10. sshd 管理細則
-
密碼應該經常換且足夠復雜
-
非默認端口登錄
-
限制登錄用戶地址
-
禁止管理員直接登錄
-
僅允許有限制用戶登錄
-
使用基於密鑰的認證
-
禁止使用版本1
本文出自 “Share your knowledge …” 博客,請務必保留此出處http://freeloda.blog.51cto.com/2033581/1216374