天天看點

SSH安全+不輸入密碼

登陸Linux伺服器,四種方法

管理機:10.8.8.160

遠端主機:10.8.8.161、10.8.8.162

一、使用者名+密碼

[10.8.8.160]$ssh [email protected]輸入密碼

[10.8.8.160]$ssh [email protected]輸入密碼

二、密鑰認證

需要管理幾台就需要建立多少對密鑰公鑰,為了便于管理,針對每台主機建立不同名的密鑰

[10.8.8.160]$mkdir .ssh

[10.8.8.160]$ssh-keygen –t rsa –f /home/yuchunyun/.ssh/id_rsa.161密鑰為空直接回車

[10.8.8.160]$ssh-keygen –t rsa –f /home/yuchunyun/.ssh/id_rsa.162密鑰為空直接回車

-t 指定密鑰對類型

-f 指定密鑰對存放路徑(建議使用絕對路徑)。

會在.ssh/檔案夾下生成id_rsa.161(密鑰)、id_rsa.161.pub(公鑰)id_rsa.162(密鑰)、id_rsa.162.pub(公鑰)

[10.8.8.160]$scp .ssh/id_rsa.161.pub [email protected]

[10.8.8.160]$scp .ssh/id_rsa.162.pub [email protected]

在被管理的主機上

mkdir .ssh

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

chmod 700 .ssh

chmod 600 .ssh/authorized_keys

必須使用此權限,否則公鑰不生效

vi /etc/ssh/sshd_config(注釋去掉)

PubkeyAuthenticationyes

AuthorizedKeysFile.ssh/authorized_keys

/etc/init.d/sshdrestart

然後在管理機上:ssh –i ./ssh/ id_rsa.161 [email protected]不用輸入密碼

               ssh –i ./ssh/ id_rsa.162 [email protected]不用輸入密碼

三、密鑰+密鑰密碼認證

在二步驟過程中,建立密鑰對時輸入密碼即可,可以為每台遠端主機建立不同的密鑰密碼,也可以使用同一個密鑰密碼

在管理機上:ssh –i ./ssh/ id_rsa.161 [email protected]輸入對應的密鑰密碼

      ssh –i ./ssh/ id_rsa.162 [email protected]

四、SSH代理:密鑰+密鑰密碼(但不用輸入密碼)

通過ssh-agent程序暫時把密鑰密碼儲存在記憶體中,後期再ssh就不用輸入密鑰密碼了

被管理機上

vi/etc/sss/sshd_config(注釋去掉)

AllowAgentForwardingyes

在管理機上

啟動ssh-agent守護程序指令:

[10.8.8.160]$ssh-agent bash

SSH_AUTH_SOCK=/tmp/ssh-lFDTy14894/agent.14894;export SSH_AUTH_SOCK;

SSH_AGENT_PID=14895;export SSH_AGENT_PID;

echo Agentpid 14895;

[10.8.8.160]$ps –ef | grepssh

這樣就啟動了ssh認證代理。認證代理産生UNIX套接字,該套接字被存放在/tmp/ssh-username/agent-socket-processID中。套接字名定位在環境變量SSH_AUTH_SOCK中。Secure Shell為維護認證代理安全性所做的一件事是使它隻能被使用者自身通路。然而,超級使用者可以通路它,并且如果同一個使用者啟動另外的ssh-agent程序,這可能産生問題。注意記住,運作ssh-agent将不會把你的密鑰載入記憶體。你必須用ssh-add指令自己把密鑰載入記憶體。

[10.8.8.160]$ssh-add ~/.ssh/id_rsa.161(輸入密鑰密碼)

[10.8.8.160]$ssh-add ~/.ssh/id_rsa.162(輸入密鑰密碼)

[10.8.8.160]$ssh-add –l(列出所有存儲在認證代理中的目前身份)

-h(可以檢視幫助)-d (移除身份)

停止ssh-agent

[10.8.8.160]$kill -9 $SSH_AGENT_PID或者

[10.8.8.160]$ssh-agent -k

五、ssh-agent結合keychain

由于ssh-agent是通過ssh-add把解密過的密鑰進行高速緩存,如果ssh-agent程序kill之後、或者重新登入shell,那麼密鑰密碼就從緩存中清除了,需要再把每一個遠端主機的密鑰密碼ssh-add一次

通過keychain,可自動調用ssh-agent守護程序和加載密鑰密碼

下載下傳keychain-2.6.9.tar.bz2

     tar jxvf keychain-2.6.9.tar.bz2

     cd keychain-2.6.9

     sh keychain.sh

     make

先確定ssh-agent程序不存在

cat key.sh

#!/bin/bash

/home/yuchunyun/keychain-2.6.9/keychain~/.ssh/id_rsa.161

/home/yuchunyun/keychain-2.6.9/keychain~/.ssh/id_rsa.162

/home/yuchunyun/keychain-2.6.9/keychain~/.ssh/id_rsa.163

/home/yuchunyun/keychain-2.6.9/keychain~/.ssh/id_rsa.141

/home/yuchunyun/keychain-2.6.9/keychain~/.ssh/id_rsa.156

sh key.sh  (依次輸入每一個密鑰密碼)

ps -ef | grep ssh  (ssh-agent程序已啟動)

echo $SSH_AGENT_PID  (空)

ssh-add –l (空)

. ~/.keychain/t17.wq-sh

ssh-add –l (key.sh中定義的密鑰都已被加入緩存中)

echo $SSH_AGENT_PID (ssh-agent的程序号變量)

ssh [email protected](不用輸入密碼)

退出shell,重新登入

會發現ssh-agent程序依然存在,但echo $SSH_AGENT_PID為空,ssh-add –l為空

隻需要再執行. ~/.keychain/t17.wq-sh即可

ssh-add

-l 列出目前已緩存的密鑰

-L 列出目前已緩存的公鑰

-d /home/yuchunyun/.ssh/id_rsa.161删除某一條緩存中的密鑰

-D 删除所有緩存中的密鑰

-x 鎖定agent,需要設定“鎖密碼”(跟之前的密鑰密碼不同),鎖定之後緩存中的密鑰都失效

-X 解除agent鎖定,需要輸入“鎖密碼”

批量管理的腳本

#cd /home/yuchunyun/shell && cat clientset.sh

   用戶端設定的腳本

   #cd /home/yuchunyun/shell && cat clientset.sh

   被連接配接的端的IP存放在host.txt

   #cd /home/yuchunyun && cat host.txt

   10.8.8.140

   10.8.8.141

   10.8.8.144

   #. .keychain/t10.wq-sh

   #ssh-add -l   即可發現密鑰儲存起來了

繼續閱讀