SSH 通訊協定有 Version1 和 Version2,即 V1 和 V2,V1只支援 RSA 加密,而 V2 支援 RSA 和 DSA 加密方式。
SSHD 有兩對金鑰:
Host Key:放在 /etc/ssh/ 之下,預設長度為 1024 bits,可設定加長至 2048 bits。
Server Key:儲存在 RAM 之中,預設長度為 768 bits,可設定加長至 1024 bits,Server Key 每小時會更新一次。
整個 SSH 通訊加密流程如下:
1. [SSH Client] ---(要求建立 SSH 連線)---> [SSH Server]
2. [SSH Client] <---(傳遞 HostKey 和 ServerKey 的公開金鑰)--- [SSH Server]
3. [SSH Client] ---(產生 SessionKey,再用 HostKey 和 ServerKey 加密:ServerKey(HostKey(SessionKey)),傳至 Server)---> [SSH Server]
4. [SSH Server]:用 HostKey 及 ServerKey 的私密金鑰,將 SessionKey 解密出來。ServerKey.Pri(ServerKey(HostKey(SessionKey))) --> HostKey.Pri(HostKey(SessionKey)) --> SessionKey。
5. [SSH Client] <---(使用 Session Key 加密進行連線)---> [SSH Server]
6. Session Key 每隔固定時間或傳遞了固定大小之後,亦會更換一次,再用同樣的方式傳遞給 SSH Server。
=========================================
SSH Server 設定
SSHD 的 Host Key 放在 /etc/ssh 底下:
# pwd
/etc/ssh
# ls -al
總計 228
drwxr-xr-x 2 root root 4096 1月 17 03:21 .
drwxr-xr-x 114 root root 12288 3月 20 21:58 ..
-rw——- 1 root root 132839 1月 12 2007 moduli (儲存 DH-GEX Diffie-Hellman Group EXchange 密鑰的檔案)
-rw-r–r– 1 root root 1827 1月 12 2007 ssh_config (ssh client 的設定檔)
-rw——- 1 root root 3345 1月 17 03:21 sshd_config (sshd 的設定檔)
-rw——- 1 root root 672 1月 12 08:35 ssh_host_dsa_key (SSH V2 的 RSA 私密金鑰)
-rw-r–r– 1 root root 590 1月 12 08:35 ssh_host_dsa_key.pub (SSH V2 的 RSA 以開金鑰)
-rw——- 1 root root 963 1月 12 08:35 ssh_host_key (SSH V1 的私密金鑰,RSA 加密)
-rw-r–r– 1 root root 627 1月 12 08:35 ssh_host_key.pub (SSH V1 的公開金鑰,RSA 加密)
-rw——- 1 root root 1675 1月 12 08:35 ssh_host_rsa_key (SSH V2 的 DSA 私密金鑰)
-rw-r–r– 1 root root 382 1月 12 08:35 ssh_host_rsa_key.pub (SSH V2 的 DSA 公開金鑰)
SSHD 的設定檔文件在 /etc/ssh/sshd_config:
#Port 22
#Protocol 2,1
#ListenAddress 0.0.0.0 (有多張網卡或多個 IP 者,可在這裡設定開啟服務的 IP,預設是全開)
ListenAddress 192.168.0.1:22 (可以設定不同 IP ,監聽不同 Port)
ListenAddress 192.168.1.1:23
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h (Server Key 多久時間更新一次)
#ServerKeyBits 768 (Server Key 的長度)
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
SyslogFacility AUTHPRIV
#LogLevel INFO
# Authentication:
LoginGraceTime 1m
PermitRootLogin without-password (要不要讓 root 登入,讓 root 登入是危險的,可以用 PermitRootLogin no 來拒絕 root 登入,可是遠端管理或備份時又需要使用 root 的身份登入,這時可用 without-password 選項,讓 root 可以用金鑰登入,可是不能用一般的帳號密碼登入)
(可以使用 PermitRootLogin forced-commands-only,這樣只能使用遠端執行命令,而不能登入,但只能用在 Public Key Authorication)
#RSAAuthentication yes
#PubkeyAuthentication yes
#AuthorizedKeysFile .ssh/authorized_keys (authorized_keys 的檔名在這邊改)
#PasswordAuthentication yes
#PermitEmptyPasswords no (無密碼的帳號要不要允許登入)
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
X11Forwarding yes (傳送 X11,讓 ssh -X 能夠使用)
AllowTcpForwarding yes (允許建立 tunnel)
#Compression delayed
UseDNS no (不要使用 DNS 反解)
Subsystem sftp /usr/libexec/openssh/sftp-server (沒有這一行就不能使用 sftp 了)