溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

免密碼秘鑰登錄 批量實(shí)現(xiàn)

發(fā)布時(shí)間:2020-08-03 23:19:07 來源:網(wǎng)絡(luò) 閱讀:648 作者:LingYi2012 欄目:開發(fā)技術(shù)

測(cè)試系統(tǒng)版本:CentOS 6.4

作用:跳板機(jī)遠(yuǎn)程被管理服務(wù)器,通常使用秘鑰登錄,實(shí)現(xiàn)此操作時(shí),拷貝秘鑰仍然需要輸入一次登錄密碼,此腳本實(shí)現(xiàn)自動(dòng)生成密鑰對(duì)并全程無交互批量拷貝公鑰到被管理服務(wù)器,并自動(dòng)禁用被管理端的ssh密碼登錄,使其只允許秘鑰登錄(免密碼秘鑰登錄實(shí)現(xiàn),參考:http://lingyi.blog.51cto.com/2837715/1763747)。

實(shí)現(xiàn):借助 ssh-copy-id 腳本的拷貝公鑰功能和expect自動(dòng)應(yīng)答工具,實(shí)現(xiàn)無交互批量拷貝公鑰的功能。(附件帶ssh-copy-id腳本,expect工具需提前自行安裝)

使用:兩個(gè)腳本,一個(gè)是系統(tǒng)自帶的ssh-copy-id腳本,一個(gè)是用來實(shí)現(xiàn)自動(dòng)應(yīng)答和禁用ssh密碼登錄的腳本。 使用時(shí)需要提供一配置文件,文件包含遠(yuǎn)程主機(jī)的 ip、用戶名和密碼信息。詳情見演示和代碼注釋。 


演示:

免密碼秘鑰登錄 批量實(shí)現(xiàn)

配置文件為ssh_keygen.cfg(默認(rèn), 可修改腳本),提供ip 用戶名和密碼信息,使用完后腳本會(huì)自動(dòng)刪除此文件。從上圖可見,1.60主機(jī)可SSH等錄但需要密碼。


免密碼秘鑰登錄 批量實(shí)現(xiàn)由于之前已經(jīng)存在一密鑰對(duì),所以會(huì)提示是否重新生成,其他操作全程無需應(yīng)答。


免密碼秘鑰登錄 批量實(shí)現(xiàn)

再次連接1.60主機(jī)便不再需要密碼,并且已經(jīng)禁用了被管理主機(jī)的SSH密碼登錄功能,見下圖。

 

免密碼秘鑰登錄 批量實(shí)現(xiàn)

免密碼秘鑰登錄 批量實(shí)現(xiàn)


代碼專區(qū):

#系統(tǒng)自帶腳本,僅僅注釋了部分顯示信息功能
#!/bin/sh

# Shell script to install your public key on a remote machine
# Takes the remote machine name as an argument.
# Obviously, the remote machine must accept password authentication,
# or one of the other keys in your ssh-agent, for this to work.

ID_FILE="${HOME}/.ssh/id_rsa.pub"

if [ "-i" = "$1" ]; then
  shift
  # check if we have 2 parameters left, if so the first is the new ID file
  if [ -n "$2" ]; then
    if expr "$1" : ".*\.pub" > /dev/null ; then
      ID_FILE="$1"
    else
      ID_FILE="$1.pub"
    fi
    shift         # and this should leave $1 as the target name
  fi
else
  if [ x$SSH_AUTH_SOCK != x ] ; then
    GET_ID="$GET_ID ssh-add -L"
  fi
fi

if [ -z "`eval $GET_ID`" ] && [ -r "${ID_FILE}" ] ; then
  GET_ID="cat ${ID_FILE}"
fi

if [ -z "`eval $GET_ID`" ]; then
  echo "$0: ERROR: No identities found" >&2
  exit 1
fi

if [ "$#" -lt 1 ] || [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
  echo "Usage: $0 [-i [identity_file]] [user@]machine" >&2
  exit 1
fi

{ eval "$GET_ID" ; } | ssh $1 "exec sh -c 'umask 077; test -d ~/.ssh || mkdir ~/.ssh ; cat >> ~/.ssh/authorized_keys && (test -x /sbin/restorecon && /sbin/restorecon ~/.ssh ~/.ssh/authorized_keys >/dev/null 2>&1 || true)'" || exit 1

#cat <<EOF
#Now try logging into the machine, with "ssh '$1'", and check in:
#
#  .ssh/authorized_keys
#
#to make sure we haven't added extra keys that you weren't expecting.
#
#EOF

#======================

#  LY
#  ------------------
#  Copyright 2016.4.14, LingYi (lydygly@163.com) QQ:1519952564
#  "Free password login, batch copy keys"

#創(chuàng)建密鑰對(duì),若有其他特殊需要,請(qǐng)自行生成,并跳過覆蓋操作或注釋掉此部分代碼
#create the secret key.
ssh-keygen -t rsa -f /root/.ssh/id_rsa  -N ""

#定義配置文件,沒有對(duì)文件做存在檢查,請(qǐng)自行創(chuàng)建并按格式輸入相關(guān)信息
ssh_keygen_conf=ssh_keygen.cfg
ssh_keygen_conf_infor=$( grep -E -v '(^ *#|^$)' $ssh_keygen_conf )

#cofigure file should be like this: 
# IP  USER  PWD

#拷貝秘鑰的函數(shù),其調(diào)用ssh_copy_id.sh腳本,若此腳本已經(jīng)改名或改變了路徑,請(qǐng)相應(yīng)的修改此函數(shù)
function copy_secret_key()
{
        #請(qǐng)自行安裝expect工具
	/usr/bin/expect -c "
	    #調(diào)用ssh_copy_id.sh腳本
		spawn bash ssh_copy_id.sh ${2}@$1
		expect {
			\"(yes/no)?\"
					{
						send \"yes\r\"
						exp_continue
					}
			\"password:\"
					{
						send \"${3}\r\"
						exp_continue
					}
			\"password:\"
					{
						send \"${3}\r\"
						exp_continue
					}
			\"password:\"
					{
						send \"${3}\r\"
						interact
					}
		}
	"
		
}	 

for(( i=1; i<=$( echo "$ssh_keygen_conf_infor" | wc -l ); i++ ))
do
	copy_secret_key $( echo "$ssh_keygen_conf_infor"|sed -n "${i}p" )
	[[ $? -ne 0 ]]  && continue
	#禁用被管理服務(wù)器的SSH密碼登錄
	ssh $(echo "$ssh_keygen_conf_infor"|sed -n "${i}p"|awk '{print $1}' ) \
	"sed -i 's/PasswordAuthentication yes/PasswordAuthentication no/' /etc/ssh/sshd_config && \
	echo Disable password login. && service sshd restart"
done
#刪除配置文件
rm -f $ssh_keygen_conf


代碼下載鏈接



向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI