ssh服務學習筆記
ssh服務介紹
ssh加密技術
ssh服務認證兩種類型
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服務學習筆記