## SSH遠程登錄
Linux系統通過sshd(ssh daemon)服務實現遠程登錄的功能,其默認端口是22,此服務為Linux系統預裝,并預設開機自啟,因此不需要額外設置便能夠實現Linux遠程登錄。
### Linux系統上的ssh客戶端——openssh
Windosw系統上有許多軟件可以實現ssh遠程登錄,比如說putty、SecureCRT、Xshell等,那么,我們在Linux系統上,應該使用哪個ssh客戶端呢?這里推薦使用**openssh-clients**(簡稱**openssh**)。
### ssh的校驗登錄方式
ssh支持兩種方法進行遠程校驗登錄:使用密碼登錄和使用密鑰登錄。
#### 使用密碼登錄
使用命令`ssh user@host`,如`ssh root@192.168.80.128`,系統會進一步提示輸入密碼,正確輸入后,你已經成功登錄到遠程服務器上了,你的一切操作都跟本地操作無異。
#### 使用密鑰認證登錄
由于密碼登錄存在易泄露、易破解的問題,因此一般主張使用ssh遠程登錄時,僅使用密鑰進行登錄,并關閉密碼遠程登錄的權限。
所謂密鑰認證,實際上是使用了一對加密的字符串:公鑰(public key)和私鑰(private key),其一般使用**RSA**算法生成。公鑰用于加密,任何人都可以看到其內容;而私鑰用于解密,只有擁有者才能看到其內容;那么顯而易見,即使壞人拿到公鑰,也無法解讀加密后的內容,因此可以保證內容的保密性。
下面介紹具體的操作:
1. 為本地本用戶賬號生成一個密鑰對:`ssh-keygen`,系統會進一步提示你輸入密鑰存放的目標目錄,按回車鍵保持默認即可(默認為`~/.ssh`);接下來會提示你輸入密鑰的密碼,一般留空即可(直接按回車鍵);此時會告知你密鑰對已成功生成。
2. 查看剛生成的公鑰內容:`cat ~/.ssh/id_rsa.pub`。
3. 方法有兩個:
- 使用命令`ssh-copy-id user@host`即可把本地的公鑰復制到遠程服務器的**authorized_keys**文件上,并給相應的目錄和文件設置好合適的權限,詳情請看這里[SSH-COPY-ID](https://www.ssh.com/ssh/copy-id)。
- 復制公鑰的全部內容,粘貼到遠程服務器的`~/.ssh/authorized_keys`里。遠程服務器上如果不存在這個**authorized_keys**文件,則直接新建一個;如果已存在,則注意需要另起一行,加到此文件末尾。這一個過程也可使用以下命令進行操作:`$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub`。需要注意,使用此手動方法,需要相應的設置好**authorized_keys**文件的權限,推薦為**600**。
4. 大功告成,從此你使用ssh遠程登錄,就不需要再輸入密碼了。
### 使用ssh遠程執行命令并獲得執行結果
#### 例子1:復制公鑰
上述的`$ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub`就是一個很好的例子:
1. `ssh user@host`,表示登錄遠程主機;
2. 單引號中的`mkdir .ssh && cat >> .ssh/authorized_keys`,表示登錄后在遠程shell上執行的命令;
3. `mkdir -p .ssh`的作用是:如果用戶主目錄中的.ssh目錄不存在,就創建一個;
4. `cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub`的作用是:將本地的公鑰文件`~/.ssh/id_rsa.pub`,重定向追加到遠程文件**authorized_keys**的末尾。
#### 例子2:查看遠程主機是否運行進程httpd
```
$ ssh user@host 'ps ax | grep [h]ttpd'
```
### 退出當前ssh會話
使用`exit`命令或`logout`命令即可。