使用Telnet與ssh協議遠程登錄linux系統
計算機終端設備通過輸入用戶賬戶標識和與之對應的口令的方式被計算機驗證的過程。
終端的分類:
1)物理終端:計算機本身的控制臺設備:通常將其標識為"pty",在現代計算機上,物理終端與早期的計算機上的物理終端的意義不一樣了。在現在的linux系統上,物理終端設備被映射到/dev/console上,所有內核輸出的信息都輸出到console終端,除此之外,其他用戶進程輸出的信息一般都輸出到虛擬終端或偽終端
2)虛擬終端:在現代的計算機中,通常將鍵盤+顯示器組合稱作"虛擬終端"或者"虛擬控制臺",即一個虛擬的終端設備,通常將其標識為"tty"
3)串行終端:如果服務器上沒有裝載顯卡設備,就可以使用串行終端設備連接計算機,通常將其標識為"ttyS"
4)模擬終端:偽終端,通過網絡客戶端工具或圖形終端下開啟的命令行終端,都稱為偽終端;通常將其標識為"pts",基於網絡的遠程連接會在/dev/pts目錄下生成一個新的設備文件
二、Telnet工具
C/S結構的程序,默認情況下不允許管理員直接實施遠程登錄,如果想使用root用戶,則需要用其他用戶登錄後使用su命令進行切換
服務器端使用Telnet-server程序包,通過23號端口進行監聽,客戶端使用telnet程序包進行鏈接。
1.在需要被鏈接的主機(服務器端)中打開Telnet-server
在Centos 5,6中打開Telnet-server
關閉防火墻和SElinux
service iptables stop
sentenforce 0
啟動telnet服務
chkconfig telnet on 或者修改 /etc/xinetd.d/telnet 文件中disable一行為no
service xinetd restart|reload
檢測服務是否啟動:
ss -tnl | grep :23
在Centos 7中打開Telnet-server
關閉防火墻和SElinux
systemctl disable firewalld.service
systemctl stop firewalld.service
iptables -F
setenforce 0
啟動 telnet服務
systemctl start telnet.socket
檢測服務是否啟動:
ss -tnl | grep :23
2.在其他主機使用Telnet命令進行鏈接
]#Telnet IP_ADDRESS
三、Openssh應用
1.Openssh應用的組成
服務器端:
應用程序:sshd
配置文件:/etc/ssh/sshd_config
客戶端:
應用程序:ssh,scp,sftp
配置文件:/etc/ssh/ssh_config
2.SSH提供的認證方式:
1)基於口令的認證:
使用遠程服務器上的有效用戶賬戶和該用戶的口令,進行身份認證;
需要在網絡中傳遞被加密的用戶名和口令信息;有被攔截和破解的風險;
2)基於密鑰的認證:
用戶在客戶端提供一對密鑰,私鑰保存在客戶端,公鑰保存在遠程服務器的某個用戶的家目錄下;
使用私鑰加密一段數據,如果服務器可以使用對應的公鑰進行解密,則說明認證成功,可以繼續後續通信;
在整個過程中不涉及用戶名和密碼等敏感信息的傳遞;
3.客戶端程序:ssh
ssh [options] [user@]hostname [command]
選項:
-l login_name:指定此次使用哪個用戶進行遠程登錄;如果使用了該選項,則hostname前面就不能再使用"user@"
ssh [email protected] 相當於 ssh -l ppp213 196.168.43.159
-p port:指明訪問服務器的具體哪個服務端口,省略該選項,默認是22,一般服務器中出於安全考慮會將監聽端口改為其他,此時可以使用此選項可以指定需要訪問的端口號
-b bind_address:指明此次訪問服務器時的源IP地址;省略該選項,則從當前客戶端所有有效的IP地址中,選擇一個
-X:支持X11轉發功能,當客戶端使用SSH協議遠程連接到服務器時,可以在客戶端打開圖形界面的配置窗口;
-Y:支持受信任的X11轉發;功能與-X相似;
-o option=value
在實施遠程連接時,引入特定的功能或以特定的方式對服務器進行訪問;
註意:-o選項所能夠使用的配置內容非常復雜,通常會將常用的此類功能選項直接寫到ssh客戶端的配置文件中(/etc/ssh/ssh_config);
格式為:
HOST pattern
OPTION1 value1
OPTION2 value2
...
4.客戶端基於密鑰的驗證機制
ssh-keygen命令:用於創建密鑰對
格式:
ssh-keygen [-q] [-b bits] [-t type] [-P passphrase] [-f output_keyfile]
常用選項:
-q:安靜模式;
-b bits:指定創建的密鑰的長度;
RSA:最少768bits,默認是2048bits;
DSA:顯式給出1024bits;
ECDSA:256bits, 384bits, 521bits;
ED25519:只是使用固定長度的密鑰而忽略-b選項指定內容;
-t type:指明公鑰加密算法的類型;
在SSHv2協議中可以使用上述四種算法;
-P passphrase:指定加密私鑰文件的口令;
-f output_keyfile:生成的密鑰文件保存的路徑;
示例:
~]# ssh-keygen -t rsa -P '123456' -f .ssh/id_rsa
創建出來的私鑰文件為/root/.ssh/id_rsa,公鑰文件為/root/.ssh/id_rsa.pub
ssh-copy-id命令:用於將創建的公鑰復制到目標服務器指定用戶的家目錄中
示例:
~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
通過以上命令添加公鑰後,再次遠程登錄時無需輸入密碼,拷貝後的公鑰存放在服務器端的/root/.ssh/authorized_keys文件內。
5.客戶端程序:sshd
配置文件:/etc/ssh/sshd_config
配置指令的格式:
指令 值
常用的指令:
Port 22:指明sshd服務進程要監聽的端口號;建議改為非22號端口;
ListenAddress 0.0.0.0:指明sshd服務進程監聽的IP地址,建議某個固定的IP地址;0.0.0.0表示當前主機上所有的可用IP地址;
Protocol 2:ssh協議的版本;
LoginGraceTime 2m:登錄時,輸入密碼操作的最大時長;
PermitRootLogin yes:是否運行root用戶直接進行遠程登錄;在生產環境中,強烈建議禁用此功能;
UseDNS no:是否允許使用DNS反向解析主機名;建議關閉此功能;
AllowUsers user1 user2 ...:設置登錄用戶的白名單;
AllowGroups group1 group2 ...:設置組的白名單;
DenyUsers user1 user2 ...:設置登錄用戶的黑名單;
DenyGroups group1 group2 ...:設置組的黑名單;
如果對此配置文件中的指令進行了修改,那必須要讓sshd進程重新讀取配置文件的內容才能使新配置生效;
CentOS 5、6:
~]# service sshd reload
CentOS 7:
~]# systemctl reload sshd
ssh服務的最佳實踐方案:
1)更換服務端口,不要使用默認的22號端口;
2)禁止使用sshv1;
3)合理的設置登錄用戶的黑名單和白名單;
4)設置空閑會話的超時時間,將其改的短一些;
5)需要利用防火墻來配合設置ssh的安全訪問規則;
6)監聽固定的IP地址而不是0.0.0.0;
7)如果必須使用口令認證機制,則需要使用足夠復雜的密碼;
~]# tr -dc A-Za-z0-9 < /dev/urandom | head -c 30 | xargs
~]# openssl rand -base64 30 | head -c 30 | xargs
8)建議最好使用基於密鑰的認證機制;
9)禁止用戶使用空密碼登錄;
10)禁止root用戶直接進行遠程登錄;
11)限制ssh的密碼失敗頻度和並發數;
12)做好日誌記錄,並經常分析日誌內容;
6.基於SSH協議的安全復制命令:scp
兩種使用情形:
推送:PUSH,將客戶端的文件發送到服務器端
scp [option...] /PATH/FROM/LOCAL_FILE [user@]hostname:/PATH/TO/DESTINATION_REMOTE_FILE
拉取:PULL,將服務器端的文件拉取到客戶端
scp [option...] [user@]hostname:/PATH/FROM/REMOTE_FILE /PATH/TO/LOCAL_FILE
常用選項:
-r:遞歸復制,可以復制目錄;
-p:保留源文件中的權限信息;
-q:安靜模式;
-P port:指定遠程主機的sshd進程監聽的服務端口;
7.安全ftp傳輸協議:sftp
基於SSH協議的FTP協議,FTP協議本身明文傳送,不安全,基於SSH加密後安全性更高。除此之外還有基於SSL協議的FTP協議(ftps)。
本身是C/S架構的程序
服務器:sftp-server, 由sshd進程管理的一個子服務項目,是sshd的一個子系統;在CentOS中默認是開啟的
客戶端:stfp命令
格式:
sftp [user@]HOSTNAME
常用命令:
help 查看幫助
ls
cd
get /PATH/TO/DESTINATION_REMOTE_FILE /PATH/FROM/LOCAL_FILE 從服務器下載文件
put /PATH/FROM/LOCAL_FILE /PATH/TO/DESTINATION_REMOTE_FILE 從本地上傳文件到服務器
quit 退出
使用Telnet與ssh協議遠程登錄linux系統