1. 程式人生 > >ssh服務學習筆記

ssh服務學習筆記

ssh linux

  1. ssh服務介紹

  2. ssh加密技術

  3. ssh服務認證兩種類型

  4. ssh連接慢的問題


1. ssh介紹

ssh服務監聽本地22端口,服務端是sshd守護進程.

客戶端一般是 CRT,Xshell,putty或者ssh客戶機

默認情況下,ssh服務主要提供2個服務功能:

一個是類似於Telnet遠程連接服務,

一個類似於FTP服務的sftp-server,借助ssh協議來傳輸數據.

特別提醒: ssh客戶端(ssh命令)還包含一個很有用的遠程安全copy命令scp,也是通過ssh協議工作的.


2.ssh加密技術

ssh服務分為ssh1.x 和 ssh2.x

ssh2支持RSA和DSA密鑰,ssh1只支持RSA算法


3. ssh服務認證兩種方式

一 基於口令的認證

通過IP+ssh端口,連接到服務端,此聯機過程是加密的.

命令如下:

用法一: 連接遠端服務器
ssh -p22 [email protected]
  參數 -p 指定端口,默認22


用法二: ssh連接過去不登錄shell,只執行命令:
ssh -p 22 [email protected] /usr/bin/free -m
      ###如果指定了命令,則在遠程主機上執行而不是登錄shell。

第一次建立連接:

會出現下面警告信息,但是連接建立後,會把對端服務器key相關信息保存在本地當前用戶家目錄下的~/.ssh/known_hosts ,下次連接就不會再有警告信息.

[root @ promotion]#ssh [email protected]
主機‘192.168.255.135(192.168.255.135)‘的真實性無法建立。
ECDSA鍵指紋是aa:91:fb:b7:ea:7b:9c:7b:b0:61:77:e3:c7:09:c5:3f。
您確定要繼續連接(是/否)? 是
警告:將“192.168.255.135”(ECDSA)永久添加到已知主機列表中。
[email protected]的密碼:

[[email protected] .ssh]# cat known_hosts 
192.168.255.134 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFI97sX7x2jd4SijuJquXhfXcExsh9d71Nxt1F9tyeyXcQL1CkTNsyIV4reJkYdQsnHRSzsFRB7oUZHbMyqFN8g=
192.168.255.135 ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBFI97sX7x2jd4SijuJquXhfXcExsh9d71Nxt1F9tyeyXcQL1CkTNsyIV4reJkYdQsnHRSzsFRB7oUZHbMyqFN8g=

二 基於密鑰對的安全認證


原理:

1.本地生成一對密鑰對,公私鑰,然後把公鑰放到要訪問的目標服務器上,另外還需要把私鑰放到ssh客戶端或對應的客戶端機器上.

2. 此時,如果想要連接到這個帶有公鑰的ssh服務器,客戶端ssh軟件或客戶端服務器就會向ssh服務器發送請求,請求用聯機的用戶密鑰進行安全驗證,ssh服務器收到請求後,會先在該ssh服務器上連接的用戶的家目錄下尋找放上去的對應用戶的公鑰,然後就把它和連接的ssh客戶端發送過來的公鑰進行比較,如果一致,ssh服務器就用公鑰加密"質詢"並發給ssh客戶端.

3.ssh客戶端收到 質詢後,就可以用自己的私鑰解密,然後再把它發送給ssh服務器,使用這種方式,需要知道聯機用戶的密鑰文件,與第一種基於口令驗證的方式相比,第二種方式不需要在網絡上傳動口令密碼,所以安全性就更高了.


命令如下:

第一步:生成公私鑰

ssh-keygen -t rsa
    參數:-t 指定加密算法  有 rsa ,dsa
 此命令會生成一對公私鑰在~/.ssh/目錄下,即id_rsa(私鑰,保留在客戶端)  id_rsa.pub(發送給服務端)
   
 
[[email protected] ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 
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:
65:92:5b:89:71:bc:2e:3b:c2:9c:a1:7c:9e:42:eb:8d [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|        ...      |
|         =..     |
|        + =.     |
|         *.      |
|        S.       |
|    . . . .      |
|   o = o o       |
|    =o*.o        |
|   .E++. .       |
+-----------------+
[[email protected] .ssh]# ls
id_rsa  id_rsa.pub  known_hosts

第二步:將公鑰發給服務端,然後ssh對端主機就不需要輸入密碼了.
ssh-copy-id 192.168.255.134

[[email protected] .ssh]# ssh-copy-id 192.168.255.134
The authenticity of host ‘192.168.255.134 (192.168.255.134)‘ can‘t be established.
ECDSA key fingerprint is aa:91:fb:b7:ea:7b:9c:7b:b0:61:77:e3:c7:09:c5:3f.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]‘s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh ‘192.168.255.134‘"
and check to make sure that only the key(s) you wanted were added.

[[email protected] .ssh]# ssh 192.168.255.134
Last login: Sun Oct  1 05:04:44 2017 from 192.168.255.1
[[email protected] ~]# 


第三步:設置服務器只允許密鑰驗證,拒絕口令驗證方式
[[email protected] ~]# vim /etc/ssh/sshd_config 
 ………………省略部分輸出信息………………
 74 
 75 # To disable tunneled clear text passwords, change to no here!
 76 #PasswordAuthentication yes
 77 #PermitEmptyPasswords no 
 78 PasswordAuthentication no   #改為no即可
 79 
 ………………省略部分輸出信息………………
[[email protected] ~]# systemctl restart sshd

註意: ssh-copy-id的特殊用法

1. 如果ssh端口修改了,如23456端口,那麽用上面的命令就無法進行分發密鑰了,

解決辦法: ssh-copy-id -i ./id_dsa.pub "-p 23456 [email protected]"

註意要用雙引號" " 把端口和用戶和ip引起來.


ssh-copy-id的原理:

ssh-copy-id -i ./id_dsa.pub [email protected]
就是把 ~/.ssh/id_dsa.pub復制到 對端用戶下的.ssh目錄(提前創建)下 ,並做了更改名字的操作,
名字改為authorized_keys ,並且權限變為600.

[[email protected] .ssh]# ll
total 8
-rw-------  1 root root 391 Oct  1 05:23 authorized_keys
-rw-r--r--. 1 root root 527 Oct  1 05:03 known_hosts
[[email protected] .ssh]# 

也就是說,你直接用其他方法,把客戶端的公鑰傳到服務端對應的.ssh/目錄下,並改名為authorized_keys,
並且修改權限為600,也就可以實現無密碼登錄了.

為什麽要改為這個名字呢?這個需要看ssh配置文件了cat /etc/ssh/sshd_config | grep authoried_keys
AuthorizedKeysFile      .ssh/authorized_keys


4. ssh連接慢的問題:

使用 ssh -v 192.168.255.134 顯示連接過程
查看連接過程.
有效解決辦法:
1. 修改本地hosts文件,把目標機器的ip和域名加上去
2. 修改本地客戶端配置文件 ssh_conf
找到
GSSAPIAuthentication yes
改為
GSSAPIAuthentication no
保存。
GSSAPI ( Generic Security Services Application Programming Interface) 是一套類似Kerberos 5 
的通用網絡安全系統接口。該接口是對各種不同的客戶端服務器安全機制的封裝,以消除安全接口的不同,
降低編程難度。但該接口在目標機器無域名解析時會有問題。我看到有人給ubuntu提交了相關bug, 
說要將GSSAPIAuthentication的缺省值設為no,不知為何,ubuntu9.10的缺省值還是yes


5. 更改ssh默認登錄配置

Port 54324                  修改默認端口22 為 54324
PermitRootLogin no          禁止root用戶登錄
PermitEmptyPasswords no     禁止空密碼登錄
UseDNS no                   不使用DNS  
GSSAPIAuthentication no      關閉這個可以解決ssh連接慢的問題

6. scp 和sftp的用法

scp的基本語法使用: scp  每次都是全量copy,效率不高.
scp -P 52113 [源文件] [email protected]:/[對方的路徑]
推送文件到遠端
scp -P 52113 [email protected]:/data/txt ./
從遠端拉取文件到本地
scp --help
-r  copy目錄
-p  保持原有屬性


sftp的基本用法:

Windows客戶端和Linux服務器之間傳輸工具:
1. rz sz
2. winscp  基於ssh
3. SFX
4) sftp  基於ssh,加密傳輸
5) Samba http  ftp  nfs

sftp -oPort=52113 [email protected]
默認鏈接過去的目錄是家目錄
put /data/oldboy.txt  /tmp  上傳文件上來,也可以指定目錄
get /data/ddd    下載文件  下載到當前目錄



7. 使用腳本進行批量分發,企業實戰

#!/bin/sh
if [ $# -ne 1 ]
   then
     echo " USAGE:/bin/sh $0 arg1"
     exit 1
fi
for n in 8 9
do
    scp $1 [email protected]$n:~   #分發目錄的話 -rp  -r目錄  -p保存屬性
done
#!/bin/sh
file="$1"
remotedir="$2"
. /etc/init.d/functions
if [ $# -ne 1 ]
   then
     echo " USAGE:/bin/sh $0 arg1"
     exit 1
fi
for n in 8 9
do
scp -P52113 -rp $file [email protected]$n:$remotedir >/dev/null 2>&1
 if [ $? -eq 0 ]
  then
     action "scp $file to $remotedir is ok" /bin/true 
  else
     action "scp $file to $remotedir is fail" /bin/false
   fi  
done


ssh服務學習筆記