1. 程式人生 > >Linux之間建立信任,即無密碼傳輸文件

Linux之間建立信任,即無密碼傳輸文件

id_rsa 驗證密碼 系統 執行命令 參數 user 提高 author 加載

1、基本場景

基本場景是想從一臺Server服務器直接登錄另一臺,或者將Server服務器的數據不需密碼驗證直接拷貝至Client服務器,以下我們簡稱Server服務器為S(待發送的數據文件在這臺服務器上),Client服務為C,信任關系的最簡單操作方法如下:

2、步驟

2.1 S服務器上,進入當前用戶根目錄下的隱藏目錄 .ssh,命令如下

cd ~/.ssh

(註:目錄名前的點好”.”表示該文件夾是一個特殊的隱藏文件夾,ls命令下默認是看不到的,通過 ls –a 命令觀察到)

2.2 生成S服務器的私鑰和公鑰:

ssh-keygen -t rsa

技術分享圖片

ssh-keygen生成密鑰用於信任關系生成

-此時會顯示Generating public/private key pair. 並提示生成的公鑰私鑰文件的存放路徑和文件名,默認是放在 /home/username/.ssh/id_rsa 這樣的文件裏的,通常不用改,回車就可以

然後Enter passphrase(empty for nopassphrase): 通常直接回車,默認不需要口令

Entersame passphrase again: 也直接回車

然後會顯式密鑰fingerprint生成好的提示,並給出一個RSA加密協議的方框圖形。此時在.ssh目錄下ls,就可以看到生成好的私鑰文件id_rsa和公鑰文件id_rsa.pub了

2.3

Server服務器上加載私鑰文件

仍然在.ssh目錄下,執行命令:

ssh-add id_rsa

系統如果提示:Identity added: id_rsa (id_rsa) 就表明加載成功了

下面有幾個異常情況處理:

–如果系統提示:could not open a connection to your authentication agent

則需要執行一下命令:

ssh-agent bash

然後再執行上述的ssh-add id_rsa命令

–如果系統提示id_rsa: No such file or directory

這是系統無法找到私鑰文件id_rsa,需要看看當前路徑是不是不在.ssh目錄,或者私鑰文件改了名字,例如如果建立的時候改成 aa_rsa,則這邊命令中也需要相應改一下

-如果系統提示 command not found,那肯定是你命令敲錯字符了

-提示Agent admitted failure to sign using the key,私鑰沒有加載成功,重試ssh-add

-註意id_rsa/id_rsa.pub文件不要刪除,存放在.ssh目錄下

2.4 把公鑰拷貝至Client服務器上

很簡單,例如 scp id_rsa.pub [email protected]:~/.ssh

2.5修改Client服務器文件

ssh登錄到Client服務器上,然後在Client服務器上,把公鑰的內容追加到authorized_keys文件末尾(這個文件也在隱藏文件夾.ssh下,沒有的話可以建立,沒有關系)

cat id_rsa.pub >> ~/.ssh/authorized_keys

以下是各種補充說明,遇到問題時可以參考

註1:這裏不推薦用文件覆蓋的方式,有些教程直接scp id_rsa.pub 到Client服務器的authorized_keys文件,會導致之前建的其他信任關系的數據被破壞,追加到末尾是更穩妥的方式;

註2: cat 完以後,Client服務器上剛才拷貝過來的id_rsa.pub文件就不需要了,可以刪除或移動到其它地方)

註3:ssh-keygen 命令通過-b參數可以指定生成的密鑰文件的長度,如果不指定則默認為1024,如果ssh-keygen –b 4096(最長4096),則加密程度提高,但是生成和驗證時間會增加。對一般的應用來說,默認長度已經足夠勝任了。如果是rsa加密方式,那麽最短長度為768byte

註4:authorized_keys文件的權限問題。如果按上述步驟建立關系後,仍然要驗證密碼,並且沒有其他報錯,那麽需要檢查一下authorized_keys文件的權限,需要作下修改: chmod g-w authorized_keys

OK,現在試試在Server端拷貝一個文件到Client服務器,應該無需交互直接就傳過去了。

但是此時從Client傳數據到Server服務器,仍然是需要密碼驗證的。如果需要兩臺服務器間能直接互傳數據,則反過來按上述步驟操作一下就可以了

3.各種可能遇到的情況和處理方法

–提示 port 22: Connection refused

可能的原因:沒有正確安裝最新的openssh-server,安裝方法如下

sudo apt-get install openssh-server

不支持apt安裝的,可以手工下載:

wget http://ftp.ssh.com/pub/ssh/ssh-3.2.9.1.tar.gz

–關於目錄和文件的權限設置

.ssh目錄的權限必須是700,同時本機的私鑰的權限必須設置成600:

chmod 600 id_rsa

否則ssh服務器會拒絕登錄

Linux之間建立信任,即無密碼傳輸文件