講解ssh的用法和操作
寫下這篇文章的目的是為了更清楚的講解和展現ssh的用法和操作,避免網上龐雜的文章和材料影響新手的學習過程。所以如果你是為老手,可以略過這篇文章了。
- SSH介紹
- 安裝使用
- OpenSSH的安裝
- 使用
- 配置和啟動ssh服務
- 登錄到遠程主機
- 配置使用key登錄ssh伺服器(ssh免密碼登錄
- 總結
- 本章總結
- 更多參考內容
SSH介紹
- 什麼是ssh? ssh是「Secure Shell」的簡寫,Secure Shell協議是國際互聯網工程任務組(The Internet Engineering Task Force,簡稱 IETF)制定的一個標準。目的是為了創建一個工作在應用層和傳輸層基礎上的安全協議。避免數據的的明文傳輸。
- 什麼是OpenSSH? 前邊說了,ssh是網路協議,而OpenSSH就是其中的一個具體實現。OpenSSH是由OpenBSD管理的項目之一,不過Openssh是跨平台的,支持linux、unix*,甚至windows。 所以實際應用中,我們用到的ssh基本上都是Openssh。
- OpenSSH有哪些功能? Secure Shell 是一個通信協議,在這個協議之上可以實現很多種應用層協議。從OpenSSH官網來看,OpenSSH提供了以下幾個應用: 1、ssh,登錄遠程伺服器、在遠程伺服器上執行命令。
2、scp,在兩台主機之間實現文件拷貝。
3、sftp,基於openssh實現的類似ftp程序。
除此之外,OpenSSH還提供了幾個命令行工具,用來方便進行ssh操作:
1、ssh-add 2、ssh-keysign3、ssh-keyscan
4、ssh-keygen安裝使用
下文將講述這些命令的實際用法。
OpenSSH的安裝。
大部分linux發行版都默認包含了OpenSSH客戶端和伺服器端,一些linux桌面發行版沒有安裝openssh伺服器端。 如果沒有安裝,我們可以通過linux發行版的軟體包管理工具進行安裝。簡單來說就是: apt-get系列:
sudo apt-get install openssh openssh-server
yum系列:
sudo yum install openssh openssh-server
其他系列:自己百度下。 備註:openssh是客戶端、openssh-server是伺服器端。不同的發行版名稱可能不同,需要自己確認一下。 安裝完畢之後,系統中就應該會有ssh命令了。這個時候就可以使用ssh來進行遠程主機的管理了。
使用
配置和啟動ssh服務:
在使用之前我們需要對ssh服務進行配置,在大多數linux系統中,ssh服務的配置文件為:/etc/ssh/sshd_config 使用vim進行編輯:
vim /etc/ssh/sshd_config
以下地方根據實際情況進行修改(yes為允許、no為禁止):
PermitRootLogin yes #是否允許root賬戶登錄
PasswordAuthentication yes #是否允許使用密碼校驗登錄
RSAAuthentication yes
PubkeyAuthentication yes #是否允許使用key登錄
然後使用系統服務管理命令啟動服務,在大部分linux系統下,命令為:service 或者 systemctl 啟動ssh服務命令:
~# service sshd restart
或者
~# systemctl restart sshd
登錄到遠程主機:
命令格式為:ssh 用戶名@遠程主機的ip地址:遠程主機埠 示例:
ssh root@192.168.0.1:22
或者:
ssh -p 22 root@192.168.0.1
註:ssh默認埠為22,遠程主機為默認埠時,可省略埠號。
執行上述命令之後,首次登陸會詢問是否保存秘鑰,輸入yes即可。然後會提示輸入密碼,輸入該用戶對應的遠程主機密碼即可。
配置使用key登錄ssh伺服器(ssh免密碼登錄):
使用key登錄,需三個步驟: 1. 修改ssh服務配置文件允許key登錄:
~# vim /etc/ssh/sshd_config
找到PubkeyAuthentication這一行,改成:
PubkeyAuthentication yes
- 重啟ssh服務:
~# service sshd restart
或者
~# systemctl restart sshd
- 使用ssh-keygen命令在本地機器上生成Rsa公鑰對:
~# ssh-keygen -t rsa
執行上述命令後,會提示輸入要保存的文件路徑,默認為:~/.ssh/id_rsa.
輸入文件名,點回車,會提示輸入秘鑰的密碼(會提示輸入兩遍),即可生成秘鑰文件:
查看秘鑰文件:
- 將公鑰文件上傳到服務上:
~# ssh-copy-id -i /home/zhao/.ssh/id_rsa_leilei.pub
root@192.168.0.1
-i
是用來指定公鑰文件,執行命令之後,按提示輸入遠程密碼即可。 5. 然後即可使用私鑰文件登錄伺服器:
~# ssh -i /home/zhao/.ssh/id_rsa_leilei root@192.168.0.1
注意:如果在第3步時為秘鑰設置了密碼,則使用秘鑰登錄伺服器時,需要輸入秘鑰密碼。
總結:
- 如果想實現免密登錄,則只需要在第三步生成密鑰對時不要設置秘鑰密碼。
- 如果使用秘鑰文件使用默認文件名(id_rsa),則在使用ssh的過程中就不需要再使用-i開關來指定秘鑰文件了。
- 拷貝文件到遠程主機: ssh中提供了scp命令用來拷貝文件到遠程主機,使用方式為:
~# scp -i /home/zhao/.ssh/id_rsa_miyao a.tar.gz root@192.168.0.1:/home/zhao/
就能將文件 a.tar.gz
拷貝到遠程主機/home/zhao/
下
~# ssh -i /home/zhao/.ssh/id_rsa_miyao root@192.168.0.1 "ls -l"
即可在遠程伺服器上執行「ls -l
」 命令,結果將輸出到本地控制台。 但是在執行一些命令時,遠程主機會提示無法找到該命令,這說明需要設置遠程主機的環境變數,可在發送給遠程主機的命令中增加source指令,如:
~# ssh -i /home/zhao/.ssh/id_rsa_miyao root@192.168.0.1 "source ~/.bash_profile && ls -l"
本章總結:
- 本文的命令示例中,均使用了
-i
開關來指定秘鑰文件,如果使用默認秘鑰文件:~/.ssh/id_rsa
登錄,則均可省略-i開關。 - 其他用法後續再補充吧。
更多參考內容
https://man.openbsd.org/ssh-add.1
https://man.openbsd.org/?query=ssh-keygen&sektion=1推薦閱讀: