OpenSSH簡介
OpenSSH是SSH(Secure Shell)協議的免費開源實現,SSH協議族可以用來進行遠程控制 ,或在計算機之間傳送文件, 而實現此功能的傳統方式,如telnet(終端仿真協議),rcp,ftp,rlogin,rsh都是極為不安全的,并且會使用明文傳送密碼,OpenSSH提供了服務端后臺程序和客戶端工具,用來加密遠程控制和文件傳輸過程中的數據 ,并由此來代替原來的類似服務.目前OpenSSH是OpenBSD的子計劃.
OpenSSH的工作特性
-
C/S架構,工作在22/TCP端口
- Client端軟件
XShell
Securecrt
Putty
- Client端軟件
-
使用非對稱加密算法進行來源主機身份確認
- 當客戶端第一次連接服務端時, 服務端會將其公鑰發送給客戶端, 并且提示用戶接受公鑰信息,并保存至用戶家目錄下
.ssh
目錄下的known_host文件中. 在下一次連接的時候,如果對方公鑰與之文件中對應的主機不符合時,將拒絕連接
- 當客戶端第一次連接服務端時, 服務端會將其公鑰發送給客戶端, 并且提示用戶接受公鑰信息,并保存至用戶家目錄下
-
使用DH算法進行密鑰交換
- 在連接過程中,SSH的傳輸使用DH交換密鑰機制生成的密鑰加密數據(是使用對稱加密算法).默認每隔一個小時會重新協商加密密鑰.
默認不允許root用戶遠程登陸系統
私鑰存放在本地,公鑰存放在對方known_host文件中
-
用戶登錄認證機制:
-
基于口令的認證
: 用戶輸入帳號和密碼 -
基于密鑰的認證
: 用戶提供一對兒密鑰,私鑰保留在本地,公鑰存在遠程服務端的用戶家目錄下.ssh/known_host文件中.- 支持的密鑰加密方法
RSA
DSA
ECDSA
ED25519
- 支持的密鑰加密方法
-
ssh protocol version
- V1 : 不安全,建議不使用
- V2 : 目前主流版本
OpenSSH的配置文件
- SSH服務端
/etc/ssh/sshd_config
- SSH客戶端
/etc/ssh/ssh_config
OpenSSH的服務進程
- Centos 6
service sshd start
- Centos 7
systemctl start sshd
OpenSSH客戶端工具的使用
- 使用格式
ssh [options] [user@host []COMMMAND]
ssh -l user host [command]
-
OPTIONS
-l USER
: 以指定的用戶登錄遠程主機,跟user@功能一樣-p PORT
: 用于指明遠程服務端的端口-X
: 支持X11轉發-
-Y
: 支持信任的X11轉發X: 是x-window的協議 11: 是其x-window的版本號
-o stricHostKeyChecking=no
: 不作嚴格的key
使用公鑰認證連接主機
-
ssh-keygen命令
- 格式格式
ssh-keygen -q -b BITS -t TYPE [-f output_keyfile] [-p PASSWORD]
-
OPTIONS
-
-t TYPE
: 密鑰的算法類型,如rsa,dsa,ecdsa,ed25519 -
-b BITS
: 指明密鑰長度 -
-p PASSWORD
: 私鑰加密密碼 -
-f OUTPUT_KEYFILE
: 生成密鑰的保存位置,生成有密碼將會保存到/etc/ssh/目錄下, 私鑰與公鑰成對出現 ,公鑰以Pub后綴結束 -
-q
: 靜默模式
-
- 格式格式
-
操作步驟
- 1 在本地主機生成一對兒密鑰
ssh-keygen -t rsa -P '' -f /root/.ssh/id_rsa
- 2 在本地主機上, 將公鑰復制到要登錄的遠程主機的用戶家目錄下的特定文件中(~/.ssh/authorized_keys)
ssh-copy-id -i .ssh/id_rsa.pub root@172.16.100.68 ssh-copy-id命令是ssh自帶的文件傳輸工具, 就以將通過-i參數指定的文檔自動傳輸到指定主機指定用戶家目錄文件中.
scp命令(基于ssh連接完成復制)
-
[options]
-
-r
: 遞歸復制 -
-p
: 保持原文件的權限信息 -
-q
: 靜默模式 -
-P PORT
: 指定遠程主機的ssh協議監聽的端口
scp ~/.ssh/id_rsa root@172.16.36.70:/root/
-
sftp命令
sftp也是一個C/S架構, 服務端由SSHD服務進程管理, 是SSHD的一個子系統,在Centos系統上的openssh,默認啟用. Client是sftp
使用格式: sftp user@host
sshd配置文件: /etc/sshd_config
-
文本格式:
配置指令 值
-
常用指令
-
port 22
: 監聽的端口 -
ListenAddress 0.0.0.0
: 監聽的地址 -
AddressFminy any
: ipv4,ipv6的地址 -
keyregenerationInterval 1H
: 密鑰更新時長 -
ServerKeybits 1024
: 對稱密鑰長度 -
LoginGraceTime 2m
: 用戶登陸的等待時長 -
premiRootLogin yes
: 是否允許管理員遠程登陸 -
StricModes yes
: 是否使用嚴格模式 -
Maxauthtries 6
: 密碼錯誤重度次數 -
MaxSessions 10
: 最大會話連接數,基也是使用子進程響應用戶請求 -
RSAuthentication yes
: 是否支持基于密鑰的認證功能 -
Pubkeyauthentication yes
: 是否支持基于公鑰的認證功能(以上一項一同使用) -
RhostsRSAAuthentication yes
: 如果在known_host文件中不存在, 就不連接, 默認是關閉的,值為No -
HostBaseauthentication no
: 是不是必須使用密鑰進行認證 -
passwordauthentication yes
: 是否允許基于口令的認證方式 -
challengeresponseauthentication no
: 挑戰式身份認證 -
kerberos
: 基于對稱加密的統一解決方案 -
usepam yes
: 認證過程基于pam完成 -
AcceptEnv
: 接受那些環境變量 -
printmotd yes
: 是否在登錄的時候打印motd信息,文件在/etc/motd中 -
printLastlog yes
: 是否顯示上一次登陸信息 -
usedens no
: 當用戶訪問sshd服務時, sshd會反解客戶端的ip地址,默認為yes, 建議關閉 -
subsystem sftp /usr/libexec/openssh/sftp-server
: 調用時需要使用sftp-server的全路徑 -
allowusers user1 user2 user3....
: 允許指定用戶才能登陸sshd -
allowgroups mygrp1 mygrp2 mygrp3....
: 允許指定組的用戶才能登陸sshd -
denyusers user1 user2 user3....
: 拒絕指定用戶 -
denygroups mygrp1 mygrp2 mygrp3....
: 拒絕指定組
deny的動作優先級高于所有allow, allow是做白名單, deny是做黑名單
-
ssh相關的man手冊
- man sshd_config : 查看sshd的配置選項
- man sshd
- man ssh_config : 查看客戶端的配置選項
- man ssh
SSH服務的最佳實踐
- 1 不要使用默認端口
- 2 禁止使用協議版本V1 (protocol version 1)
- 3 限制可登陸的用戶(最好做白名單)
- 4 設定空閑會議超時時長
- 5 利用防火墻設置ssh訪問策略
- 6 僅監聽特定的IP地址(一般只監聽私網上的IP地址)
- 7 基于口令認證時,要使用強密碼策略
- 生成隨機密碼方法:
tr -dc A-Za-z0-9_ < /dev/urandom | head -c 30 | xargs
- 生成隨機密碼方法:
- 8 使用基于密鑰的認證
- 9 要禁止使用空密碼登錄
- 10 禁止root用戶直接登錄
- 11 限制ssh的訪問頻度和并發在線數
- 12 做好日志,經常分析
- 日志存放: /var/log/secure
Linux之dropbear
ssh協議的另一個實現, 輕量化ssh的實現方案,多用于嵌入式環境中
輕量化的實現方案,多用于嵌入式環境中
dropbearkey -t rsa -s 2048 -f /etc/dropbear/dropbear_rsa_host_key
dropbearkey -t ecdsa -s 512 -f /etc/dropbear/dropbear_ecdsa_host_key
dropbear -p 2202 -F -E
常用工具:
dbclient : 客戶端程序
dropbearkey : 主機密鑰生成工具
/etc/dropbear
服務端程序 :
dropbear
-p [ip:]Port
-F : 前臺 運行
-E : 將日志發往錯誤輸出