Linux scp 免密碼 傳輸文件
背景介紹
最近項目是集群化部署(由 node1,node2,node3 三台 CentOS 7.4 的虛擬機構成)。
但是,涉及到跨機器同步文件的問題,想通過寫shell文件實現,用 crontab 設置定時任務,定時執行改腳本。
由於每次都需要輸入密碼,導致定時任務沒法正常工作,因此,需要三台機器之間可以免密碼互相訪問。
建立SSH的信任關系
以實現 node1 免密碼給 node2 scp傳輸文件為例說明,需要如下幾個步驟:
1、生成 node1 的秘鑰(私鑰和公鑰)
1)進入 node1 的 /root/.ssh 目錄
cd /root/.ssh/
2)執行如下命令,生成公鑰和私鑰(此時,一路回車即可)
ssh-keygen -t rsa
其中,id_rsa 是私鑰,id_rsa.pub 是公鑰。
2、將 node1 的 id_rsa.pub中的內容追加到 node2 的authorized_keys 認證文件中
1)將 node1 的公鑰(id_rsa.pub)信息,輸出到臨時認證文件 authorized_keys_node1 中
cat id_rsa.pub >authorized_keys_node1
2)將 authorized_keys_node1 文件 scp 到 /root/.ssh/ 目錄下
scp authorized_keys_node1 root@node2:/root/.ssh/
3)登錄到node2節點,進入 /root/.ssh目錄
cd /root/.ssh/
4)將 node1 的公鑰信息,追加到 node2 的認證文件(authorized_keys)中
cat authorized_keys_node1 >>authorized_keys
至此,node1 到 node2 的信任關系建立好了,node1 scp文件到 node2,就不在需要輸入密碼驗證了。
其他機器之間的信任關系,如有需要,可以依此方法進行配置。
【額外說明】
1、上面用到了 Shell 的 > 和 >>,因為使用場景不同。
如有不清楚二者異同點的同學,可以參考博文:https://www.cnblogs.com/miracle-luna/p/11809725.html
2、文中提到的 id_rsa 和 id_rsa.pub 中的 rsa,是指的 RSA加密算法。
RSA加密算法是一種非對稱加密算法。在公開密鑰加密和電子商業中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
對極大整數做因數分解的難度決定了RSA算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA算法愈可靠。假如有人找到一種快速因數分解的算法的話,那么用RSA加密的信息的可靠性就肯定會極度下降。但找到這樣的算法的可能性是非常小的。今天只有短的RSA鑰匙才可能被強力方式解破。到目前為止,世界上還沒有任何可靠的攻擊RSA算法的方式。只要其鑰匙的長度足夠長,用RSA加密的信息實際上是不能被解破的。