Đối với bối cảnh, tôi có cơ sở hạ tầng gồm nhiều máy sử dụng ssh.
Chúng tôi kết nối qua ssh với tư cách là người chủ trên các máy mà không cần mật khẩu nhờ vào tệp ủy quyền trên mỗi mchine. Chúng tôi thường xuyên bổ sung các máy mới trong cơ sở hạ tầng của mình.
Vấn đề là tạo một tập lệnh:
- Ping tất cả máy (bằng cách phân tích cú pháp qua tệp chứa tất cả tên máy của chúng tôi)
- Nếu ping thành công, Kiểm tra kết nối ssh mà không cần mật khẩu (bằng lệnh
ssh -o BatchMode=yes $machine uname -a
)
- Nếu ssh không hoạt động VÀ đó là do thông báo này:
Bạn có chắc chắn muốn tiếp tục kết nối (có/không)?
(vì đó là kết nối ssh đầu tiên với máy này chẳng hạn), sau đó với một tập lệnh mong đợi, hãy gửi "có"
- Nếu ssh không hoạt động VÀ đó là do mật khẩu được hỏi, thì với một tập lệnh mong đợi, hãy gửi "CTRL + C"
Vấn đề của tôi là cả hai điều kiện 3. và 4. đều có thể xảy ra với một máy và tôi không thể tìm ra cách sử dụng câu lệnh continue trong tập lệnh của mình.
Trường hợp cụ thể này sẽ dành cho một máy yêu cầu "có" nhưng sau đó cũng yêu cầu mật khẩu.
Đây là những gì kịch bản trông giống như:
cho máy trong `cat ${liste} | grep -v \#`
làm
ping -c1 ${machine} 2>&1 >/dev/null
nếu [ $? -eq 0 ]
sau đó
tiếng vang ${machine} >> ${pingok}
ssh -o BatchMode=yes ${machine} uname -a &> $verifssh 2>&1
tiếng vang $? > ${mã thoát}
nếu grep -q "255" "$exitcode"
sau đó
cắt -c 15-74 $verifssh > $verifssh2
nếu grep "ication không thành công." "$verifssh2"
sau đó
mong đợi ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null
tiếp tục 3
elif grep "Quyền bị từ chối (khóa công khai, mật khẩu, tương tác bàn phím)." "$verifssh2"
sau đó
mong đợi ${scriptexpectknownhosts} ${machine} 2>&1 >/dev/null
echo "${machine} -> Máy hỏi mật khẩu" >> "${sshnok}"
fi
elif grep -q "0" "$exitcode"
sau đó
tiếng vang "${machine} hoạt động với ssh"
tiếng vang "${machine}" >> ${sshok}
fi
khác
tiếng vang "${machine}" >> "${pingnok}"
fi
xong
Đây là kịch bản mong đợi (nó xử lý cả hai tình huống):
đặt máy [lindex $argv 0]
sinh ra ssh $machine
chờ đợi {
"Bạn có chắc chắn muốn tiếp tục kết nối (có/không) không?" {send "yes\r";exp_continue}
-chính xác "Mật khẩu:" {đóng}
-re $prompt {gửi "thoát\r";đóng}
}
Vì vậy, tóm lại, vấn đề của tôi là, đối với máy yêu cầu câu trả lời "có" và sau đó cần mật khẩu, tôi muốn đăng ký chúng trong ${sshnok}
tập tin nhưng tiếp tục
không hoạt động. tôi đã thử tiếp tục
/ tiếp tục 2
/ tiếp tục 3
và nó vẫn không muốn quay lại vòng lặp trước đó.