講解ssh的用法和操作

寫下這篇文章的目的是為了更清楚的講解和展現ssh的用法和操作,避免網上龐雜的文章和材料影響新手的學習過程。所以如果你是為老手,可以略過這篇文章了。

  • SSH介紹
  • 安裝使用
    • OpenSSH的安裝
    • 使用
      • 配置和啟動ssh服務
      • 登錄到遠程主機
      • 配置使用key登錄ssh伺服器(ssh免密碼登錄
      • 總結
  • 本章總結
  • 更多參考內容

SSH介紹

  1. 什麼是ssh? ssh是「Secure Shell」的簡寫,Secure Shell協議是國際互聯網工程任務組(The Internet Engineering Task Force,簡稱 IETF)制定的一個標準。目的是為了創建一個工作在應用層和傳輸層基礎上的安全協議。避免數據的的明文傳輸。
  2. 什麼是OpenSSH? 前邊說了,ssh是網路協議,而OpenSSH就是其中的一個具體實現。OpenSSH是由OpenBSD管理的項目之一,不過Openssh是跨平台的,支持linux、unix*,甚至windows。 所以實際應用中,我們用到的ssh基本上都是Openssh。
  3. OpenSSH有哪些功能? Secure Shell 是一個通信協議,在這個協議之上可以實現很多種應用層協議。從OpenSSH官網來看,OpenSSH提供了以下幾個應用:

    1、ssh,登錄遠程伺服器、在遠程伺服器上執行命令。

    2、scp,在兩台主機之間實現文件拷貝。

    3、sftp,基於openssh實現的類似ftp程序。

除此之外,OpenSSH還提供了幾個命令行工具,用來方便進行ssh操作:

1、ssh-add

2、ssh-keysign

3、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

  1. 重啟ssh服務:

~# service sshd restart

或者

~# systemctl restart sshd

  1. 使用ssh-keygen命令在本地機器上生成Rsa公鑰對:

~# ssh-keygen -t rsa

執行上述命令後,會提示輸入要保存的文件路徑,默認為:~/.ssh/id_rsa.

輸入文件名,點回車,會提示輸入秘鑰的密碼(會提示輸入兩遍),即可生成秘鑰文件:

查看秘鑰文件:

  1. 將公鑰文件上傳到服務上:

~# 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步時為秘鑰設置了密碼,則使用秘鑰登錄伺服器時,需要輸入秘鑰密碼。

總結:

  1. 如果想實現免密登錄,則只需要在第三步生成密鑰對時不要設置秘鑰密碼。
  2. 如果使用秘鑰文件使用默認文件名(id_rsa),則在使用ssh的過程中就不需要再使用-i開關來指定秘鑰文件了。

  3. 拷貝文件到遠程主機: 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/

5. 在遠程伺服器上執行命令: 直接將需要執行的命令追加到ssh命令後面即可,如:

~# 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"

本章總結:

  1. 本文的命令示例中,均使用了 -i 開關來指定秘鑰文件,如果使用默認秘鑰文件:~/.ssh/id_rsa登錄,則均可省略-i開關。
  2. 其他用法後續再補充吧。

更多參考內容

man.openbsd.org/ssh-add

man.openbsd.org/?


推薦閱讀:

TAG:shell腳本 | Linux | Mac |