Linux之間建立信任,即無密碼傳輸文件
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
仍然在.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之間建立信任,即無密碼傳輸文件