Ssh 信任關係建立後仍需要輸入密碼

Michael_DD發表於2014-08-14
ssh 建立信任後,依舊需要密碼

原因分析,以及處理步驟:
1  檢視 log/secure
,分析問題在何處;檢查/var/log/messages

2  檢視 /root/.ssh/authorized_keys檔案的屬性,以及.ssh檔案屬性   是不是許可權過大。.ssh目錄的許可權必須是700,同時本機的私鑰的許可權必須設定成600:

3  修改/etc/ssh/sshd_config檔案,  把密碼認證關閉, 將認證改為 passwordAuthentication no   重啟下sshd。 service sshd restart;

4  執行setenforce 0,暫時關閉selinux


檢視selinux狀態



1  /usr/sbin/sestatus -v      ##如果SELinux status引數為enabled即為開啟狀態


    SELinux status:                 enabled

2   getenforce                 ##可以用這個命令檢查

關閉selinux:



1  臨時關閉(不用重啟機器):


   setenforce 0                  ##設定SELinux 成為permissive模式

                                 ##setenforce 1 設定SELinux 成為enforcing模式

2  配置檔案修改需要重啟機器:

   修改/etc/selinux/config 檔案

   將SELINUX=enforcing改為SELINUX=disabled

   重啟機器即可


附錄:
ssh信任關係建立方法

1 在伺服器上,進入當前使用者根目錄下的隱藏目錄 .ssh 命令

cd  ~/.ssh

透過 ls –a 命令觀察到

2 生成S伺服器的私鑰和公鑰

ssh-keygen -t rsa

ssh-keygen生成金鑰用於信任關係生成

-此時會顯示Generating public/private key pair. 並提示生成的公鑰私鑰檔案的存放路徑和檔名,預設是放在 /home/username/.ssh/id_rsa 這樣的檔案裡的,通常不用改,回車
然後Enter passphrase(empty for no passphrase): 通常直接回車
Enter same passphrase again: 也直接回車
然後會顯式金鑰fingerprint生成好的提示,並給出一個RSA加密協議的方框圖形。此時在.ssh目錄下ls,可以看到生成好的私鑰檔案id_rsa和公鑰檔案id_rsa.pub


以下是各種補充說明:

注1:如果此時提示 id_rsaalready exists,Overwrite(y/n) 則說明之前已經有人建好了金鑰,此時選擇n 忽略本次操作就行,可以直接用之前生成好的檔案;當然選y覆蓋一下也無妨

注2:公鑰用於加密,它是向所有人公開的(pub是公開的單詞public的縮寫);私鑰用於解密,只有密文的接收者持有


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目錄下


4 把公鑰複製至Client伺服器上

很簡單,例如 
scp id_rsa.pub user@10.11.xx.xx:~

5 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加密方式,那麼最短長度為768 byte
注4:authorized_keys檔案的許可權問題。如果按上述步驟建立關係後,仍然要驗證密碼,並且沒有其他報錯,那麼需要檢查一下authorized_keys檔案的許可權,需要作下修改: chmod g-w authorized_keys
OK,現在試試在Server端複製一個檔案到Client伺服器,應該無需互動直接就傳過去了。
但是此時從Client傳資料到Server伺服器,仍然是需要密碼驗證的。如果需要兩臺伺服器間能直接互傳資料,則反過來按上述步驟操作一下就可以了


異常情況處理:
–提示 port 22: Connection refused

可能的原因:沒有正確安裝最新的openssh-server,安裝方法如下
sudo apt-get install openssh-server
不支援apt安裝的,可以手工下載:
wget
–關於目錄和檔案的許可權設定
.ssh目錄的許可權必須是700,同時本機的私鑰的許可權必須設定成600:
chmod 600 id_rsa
否則ssh伺服器會拒絕登入


關於ssh_config_sshd_config配置檔案:

/etc/ssh/ssh_config:
Host *
選項“Host”只對能夠匹配後面字串的計算機有效。“*”表示所有的計算機。
ForwardAgent no
“ForwardAgent”設定連線是否經過驗證代理(如果存在)轉發給遠端計算機。
ForwardX11 no
“ForwardX11”設定X11連線是否被自動重定向到安全的通道和顯示集(DISPLAY set)。
RhostsAuthentication no
“RhostsAuthentication”設定是否使用基於rhosts的安全驗證。
RhostsRSAAuthentication no
“RhostsRSAAuthentication”設定是否使用用RSA演算法的基於rhosts的安全驗證。
RSAAuthentication yes
“RSAAuthentication”設定是否使用RSA演算法進行安全驗證。
PasswordAuthentication yes
“PasswordAuthentication”設定是否使用口令驗證。
FallBackToRsh no
“FallBackToRsh”設定如果用ssh連線出現錯誤是否自動使用rsh。
UseRsh no
“UseRsh”設定是否在這臺計算機上使用“rlogin/rsh”。
BatchMode no
“BatchMode”如果設為“yes”,passphrase/password(互動式輸入口令)的提示將被禁止。當不能互動式輸入口令的時候,這個選項對指令碼檔案和批處理任務十分有用。
CheckHostIP yes
“CheckHostIP”設定ssh是否檢視連線到伺服器的主機的IP地址以防止DNS欺騙。建議設定為“yes”。
StrictHostKeyChecking no
“StrictHostKeyChecking”如果設定成“yes”,ssh就不會自動把計算機的密匙加入“$HOME/.ssh/known_hosts”檔案,並且一旦計算機的密匙發生了變化,就拒絕連線。
IdentityFile ~/.ssh/identity
“IdentityFile”設定從哪個檔案讀取使用者的RSA安全驗證標識。
Port 22
“Port”設定連線到遠端主機的埠。
Cipher blowfish
“Cipher”設定加密用的密碼。
EscapeChar ~
“EscapeChar”設定escape字元。


/etc/ssh/sshd_config:

Port 22
“Port”設定sshd監聽的埠號。
ListenAddress 192.168.1.1
“ListenAddress”設定sshd伺服器繫結的IP地址。
HostKey /etc/ssh/ssh_host_key
“HostKey”設定包含計算機私人密匙的檔案。
ServerKeyBits 1024
“ServerKeyBits”定義伺服器密匙的位數。
LoginGraceTime 600
“LoginGraceTime”設定如果使用者不能成功登入,在切斷連線之前伺服器需要等待的時間(以秒為單位)。
KeyRegenerationInterval 3600
“KeyRegenerationInterval”設定在多少秒之後自動重新生成伺服器的密匙(如果使用密匙)。重新生成密匙是為了防止用盜用的密匙解密被截獲的資訊。
PermitRootLogin no
“PermitRootLogin”設定root能不能用ssh登入。這個選項一定不要設成“yes”。
IgnoreRhosts yes
“IgnoreRhosts”設定驗證的時候是否使用“rhosts”和“shosts”檔案。
IgnoreUserKnownHosts yes
“IgnoreUserKnownHosts”設定ssh daemon是否在進行RhostsRSAAuthentication安全驗證的時候忽略使用者的“$HOME/.ssh/known_hosts”
StrictModes yes
“StrictModes”設定ssh在接收登入請求之前是否檢查使用者家目錄和rhosts檔案的許可權和所有權。這通常是必要的,因為新手經常會把自己的目錄和檔案設成任何人都有寫許可權。
X11Forwarding no
“X11Forwarding”設定是否允許X11轉發。
PrintMotd yes
“PrintMotd”設定sshd是否在使用者登入的時候顯示“/etc/motd”中的資訊。
SyslogFacility AUTH
“SyslogFacility”設定在記錄來自sshd的訊息的時候,是否給出“facility code”。
LogLevel INFO
“LogLevel”設定記錄sshd日誌訊息的層次。INFO是一個好的選擇。檢視sshd的man幫助頁,已獲取更多的資訊。
RhostsAuthentication no
“RhostsAuthentication”設定只用rhosts或“/etc/hosts.equiv”進行安全驗證是否已經足夠了。
RhostsRSAAuthentication no
“RhostsRSA”設定是否允許用rhosts或“/etc/hosts.equiv”加上RSA進行安全驗證。
RSAAuthentication yes
“RSAAuthentication”設定是否允許只有RSA安全驗證。
PasswordAuthentication yes
“PasswordAuthentication”設定是否允許口令驗證。
PermitEmptyPasswords no
“PermitEmptyPasswords”設定是否允許用口令為空的帳號登入。
AllowUsers admin
“AllowUsers”的後面可以跟著任意的數量的使用者名稱的匹配串(patterns)或user@host這樣的匹配串,這些字串用空格隔開。主機名可以是DNS名或IP地址。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29500582/viewspace-1251139/,如需轉載,請註明出處,否則將追究法律責任。

相關文章