使用場景
比如我們在使用ansible批量部署大量伺服器的時候,如果一台一台的伺服器去分發金鑰會很麻煩 所以用指令碼實現批量部署免密登入就很現實了。下面的**親測成功
但是有乙個缺點,缺點就是伺服器的密碼都是一致的,如果不是一致的,是不成功的。
這裡用到了乙個軟體expect,expect是乙個自動化互動套件,主要應用於執行命令和程式時,系統以互動形式要求輸入指定字串,實現互動通訊。
expect 自動互動流程:
spawn啟動指定程序–expect獲取指定關鍵字–send指定程式傳送指定字元 --執行完退出。
expect常用命令總結:
spawn 互動程式開始後面跟命令或者指定程式
expect 獲取匹配資訊匹配成功則執行expect後面的程式動作
send exp_send 用於傳送指定的字串資訊
exp_continue 在expect中多次匹配就需要用到
send_user 用來列印輸出 相當於shell中的echo
exit 退出expect指令碼
eof expect執行結束 退出
set 定義變數
puts 輸出變數
settimeout 設定超時時間
ssh部署免密登入的具體指令碼
#!/bin/bash
rpm -q expectif[
$? -eq 0 ]
;then
echo
"已安裝"
else
yum -y install
expectif[
$? -eq 0 ]
;then
echo
"安裝成功"
else
echo
"安裝失敗"
fifi
#本機是否有ssh金鑰 沒有則生成if[
! -f ~/.ssh/id_rsa ]
;then
echo
"請按3次enter健"
ssh-keygen -t rsa
fissh_expect(
) "password:"
eof
}";}[ -f hosts.txt ]
&&rm -rf hosts.txt
#定義 hosts.txt
cat> hosts.txt <<
eof 10.0.0.42
10.0.0.43
eofpasswd=123456
for ip in
`cat hosts.txt|
awk''`do
ssh_expect $
$done
ssh實現免密登入
假設現在有兩台主機a和b,其中主機b有乙個使用者名叫caixiong,ip是22.33.44.55,現在想要實現ssh免密從主機a登入到主機b的caixiong使用者,只需要下面三步操作就可以完成。第一步 在主機a上生成公 私鑰對。如果之前已經生成過了金鑰對則跳過此步 ssh keygen t rs...
實現ssh免密登入
設定ssh無密碼登入可以提高我們主機的安全性。ssh 無密碼登入要使用公鑰與私鑰。linux下可以用ssh keygen生成公鑰 私鑰對,接下來以centos為例。例圖 實驗主機a無金鑰訪問主機b 實戰部分 主機cent65 192.168.1.65 主機cent67 192.168.1.67 現想...
SSH實現免密登入
目的 在server1上免密登入server2 1.在server1上執行命令 ssh keygen t rsa p 生成公鑰和私鑰,預設路徑為 root ssh 2.將 id rsa.pub檔案拷貝到遠端伺服器server2,然後執行命令 cat id rsa.pub root ssh autho...