ssh使用過程中的遇到的問題及解決方法

寫在前面

       最近在使用ssh過程中遇到了一些問題,雖然很容易解決,但是有些容易造成我疑惑的地方,藉此機會將這些問題及解決方法記錄下來,以免以後忘記,與大家共勉。

ssh免密登錄

       目前linux中一般都已經默認安裝了ssh。主要就是在使用ssh的時候想要免密登錄的問題,我在設置這個免密登錄時,查看了許多博客,感覺博客中都會介紹ssh需要生成祕鑰,然後發送公鑰,保留私鑰的問題,但是我感覺沒有說清楚是由哪一方來生成祕鑰。我自己在設置的時候,就弄反過,導致設置得不太好。寫幾點我的總結,希望對大家有幫助。

  • 發送公鑰的一方是客戶端,所以生成祕鑰的工作要由客戶端來完成。這裏的客戶端說的是想要去遠程登錄的一方,linux系統雖然通常作爲服務器端,但是它也會發生角色轉換的時候,有時候它也會作爲客戶端去連接其他服務器。
  • 服務器端要做的就是將公鑰放到用戶家目錄下的.ssh文件夾下(沒有.ssh文件夾可以自行創建),然後將公鑰中的內容複製到authorized_keys文件中(authorized_keys文件位於.ssh中,沒有的話也需自行創建)。
  • 客戶端公鑰上傳到服務器端並將內容複製到authorized_keys後,有些服務器還是無法遠程登錄,例如cent os、redhat等,此時就需要去修改服務器端的配置文件了(此時需要root權限)

ssh免密登錄的詳細步驟

  1. 配置服務器端的ssh訪問
# 1.在用戶家目錄下創建.ssh的配置,如果此文件夾已經存在請忽略此步。
$ mkdir .ssh

# 2. 進入剛創建的.ssh目錄並創建authorized_keys文件,此文件存放客戶端遠程訪問的 ssh的公鑰。
$ cd ~/.ssh
$ touch authorized_keys

# 3. 設置權限,此步驟不能省略,而且權限值也不要改,不然會報錯。
$ chmod 700 /home/git/.ssh/
$ chmod 600 /home/git/.ssh/authorized_keys

此時,服務端的配置基本完成。接下需要把客戶端的公鑰拷貝到authorized_keys文件中。

  1. 客戶端生成祕鑰,並將公鑰上傳至服務器

以下是客戶端創建ssh私鑰和拷貝的過程,如果您有私鑰越過創建私鑰的過程。
請用您的客戶端進入終端,如果客戶端是Windows系統,建議先安裝git軟件,下載地址

第一步: 創建客戶端的ssh私鑰和公鑰

檢查是否已經擁有ssh公鑰和私鑰:進入用戶的主目錄。

用戶主目錄:
Windows系統:C:\Users\用戶名
Linux系統:/home/用戶名
Mac系統:/Users/用戶名

然後查看是否有.ssh文件夾,此文件夾下是否有如下幾個文件。

# 用戶主目錄的.ssh文件夾下
.ssh
├── id_rsa
└── id_rsa.pub  # 我們要用的公鑰

如果沒有,那麼用ssh-keygen創建ssh的私鑰。

ssh-keygen -t rsa
# 接下來,三個回車默認即可。

創建私鑰成功後,在查看用戶目錄是否有意加有了公鑰文件id_rsa.pub

第二步: 拷貝私鑰到git的服務器

如何把客戶端的文件拷貝到服務器端,我建議用scp命令進行拷貝。
以下以linux爲例:

# 首先進入我的用戶主目錄的.ssh目錄下,注意用戶名xxx替換成自己的
$ cd ~/.ssh

# 以下命令是:把本地的id_rsa.pub文件拷貝到CentOS服務器,登錄賬號是git。
# 冒號後面默認就是git賬號的主目錄,最後文件被保存成laoma.pub
# scp使用方式爲:scp 本地文件 遠程服務器用戶名@遠程主機ip地址或主機名或域名:文件保存位置。
$ scp ./id_rsa.pub [email protected]:.ssh/laoma.pub
  1. 服務器端添加客戶端的SSH公鑰
    切換到服務器端,把剛纔上傳的laoma.pub文件的內容添加到 authorized_keys中,就可以允許客戶端ssh訪問了。
# 切換到git賬戶
$ su - git

$ ls -al
# 查看一下.ssh目錄是否有authorized_keys和laoma.pub文件
# .
# |-- authorized_keys
# `-- laoma.pub

# 如果有,那麼進行下面的把laoma.pub文件中的內容添加到authorized_keys中.
$ cat laoma.pub >> authorized_keys

# >> 是在文件後面追加的意思,主要如果用其他編輯器,每個ssh的pub要單獨一行,建議用cat命令方便簡單。

到此爲止,您配置的客戶端應該可以ssh的方式免密登錄服務器端了。
萬一出現還是需要密碼才能登錄的情況,那麼就去修改sshd_config配置文件,參考如下命令。

sudo vim /etc/ssh/sshd_config

       找到如下命令修改成如下所示的情況(大概在50行左右)。

RSAAuthentication yes
PubkeyAuthentication yes
 
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
AuthorizedKeysFile      .ssh/authorized_keys

       有的系統中可能沒有RSAAuthentication yes,需要我們自行填寫上。最後保存成功,就可以嘗試遠程登錄服務器端了,就可以發現可以實現免密登錄了。完美!!!

文中都是我個人的理解,如有錯誤的地方歡迎下方評論告訴我,我及時更正,大家共同進步

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章