Linux系統下如何做到SSH免密碼登錄

A爲本地主機(即用於控制其他主機的機器) ;
B爲遠程主機(即被控制的機器Server), 假如ip爲172.24.253.2 ;
A和B的系統都是Linux
 
在A上的命令:
# ssh-keygen -t rsa (連續三次回車,即在本地生成了公鑰和私鑰,不設置密碼)
# ssh [email protected] "mkdir .ssh;chmod 0700 .ssh" (需要輸入密碼, 注:必須將.ssh的權限設爲700)
# scp ~/.ssh/id_rsa.pub [email protected]:.ssh/id_rsa.pub (需要輸入密碼)
 
在B上的命令:
# touch /root/.ssh/authorized_keys (如果已經存在這個文件, 跳過這條)
# chmod 600 ~/.ssh/authorized_keys  (# 注意: 必須將~/.ssh/authorized_keys的權限改爲600, 該文件用於保存ssh客戶端生成的公鑰,可以修改服務器的ssh服務端配置文件/etc/ssh/sshd_config來指定其他文件名)
# cat /root/.ssh/id_rsa.pub  >> /root/.ssh/authorized_keys (將id_rsa.pub的內容追加到 authorized_keys 中, 注意不要用 > ,否則會清空原有的內容,使其他人無法使用原有的密鑰登錄)
 
回到A機器:
# ssh [email protected] (不需要密碼, 登錄成功)
 
假如在生成密鑰對的時候指定了其他文件名(或者需要控制N臺機器,此時你會生成多對密鑰),則需要使用參數-i指定私鑰文件
# ssh [email protected] -i /path/to/your_id_rsa
   www.2cto.com  
scp也是一樣,如:
scp -i /root/.ssh/id_rsa  ./xxx 192.168.102.158:/home/wwy/bak
 
因爲默認情況下ssh命令會使用~/.ssh/id_rsa作爲私鑰文件進行登錄,如果需要連接多臺服務器而又不希望每次使用ssh命令時指定私鑰文件,可以在ssh的客戶端全局配置文件/etc/ssh/ssh_config(或本地配置文件~/.ssh/config, 如果該文件不存在則建立一份)中增加如下配置
IdentityFile /path/to/your_id_rsa. 
 
也可以爲每個服務器指定一個Host配置:  
 
Host 172.24.253.2
        IdentityFile /path/to/your_id_rsa
  
如果連接時出現如下的錯誤:
  Agent admitted failure to sign using the key
則使用 ssh-add 指令將私鑰 加進來 (根據個人的密匙命名不同更改 id_rsa)
 
1
ssh-add   ~/.ssh/id_rsa
 
如果能保護好自己的私鑰, 這種方法相對在shell上輸入密碼, 要安全一些
   www.2cto.com  
######################################################################### 
深入一點點:

從表面上簡單的理解一下登錄的過程,
首先 ssh-keygen -t rsa 命令生成了一個密鑰和一個公鑰, 而且密鑰可以設置自己的密碼
可以把密鑰理解成一把鑰匙, 公鑰理解成這把鑰匙對應的鎖頭,
把鎖頭(公鑰)放到想要控制的server上, 鎖住server, 只有擁有鑰匙(密鑰)的人, 才能打開鎖頭, 進入server並控制
而對於擁有這把鑰匙的人, 必需得知道鑰匙本身的密碼,才能使用這把鑰匙 (除非這把鑰匙沒設置密碼), 這樣就可以防止鑰匙被了配了(私鑰被人複製)
 
當然, 這種例子只是方便理解罷了,
擁有root密碼的人當然是不會被鎖住的, 而且不一定只有一把鎖(公鑰), 但如果任何一把鎖, 被人用其對應的鑰匙(私鑰)打開了, server就可以被那個人控制了
所以說, 只要你曾經知道server的root密碼, 並將有root身份的公鑰放到上面, 就可以用這個公鑰對應的私鑰"打開" server, 再以root的身分登錄, 即使現在root密碼已經更改! 
---------------------------------------------------------------------------------------
方法二、安裝sshpass
# sudo apt-get install sshpass
安裝完成後使用sshpass允許你用 -p 參數指定明文密碼,然後直接登錄遠程服務器。例如: 
# sshpass -p '你的密碼' ssh 用戶名@服務器ip地址
   www.2cto.com  
用 '-p' 指定了密碼後,還需要在後面跟上標準的 ssh 連接命令。 
Sshd的配置文件/etc/ssh/ssd_config
-------------------------------
ssh無密碼驗證的情況下向遠程主機發送命令
 
發送一條:
ssh username@remote_server_ip your_command 

ssh username@remote_server_ip “your_command1; your_command2; your_command3”


本文來自 http://www.2cto.com/os/201205/133514.html

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