GUI ಇಲ್ಲದೆ Linux ಶೆಲ್ನಿಂದ Cisco Secure Client ಗೆ ಲಾಗಿನ್
here-document ಲಾಗಿನ್ ಪ್ರೋಟೋಕಾಲ್ ಅಲ್ಲ. ಪ್ರಾಂಪ್ಟ್ಗಳ ನಿಜವಾದ ಕ್ರಮವನ್ನು ದಾಖಲಿಸಿ, ಅದು ಬದಲಾದಾಗ expect ಬಳಸಿ, ಮತ್ತು ಪಾಸ್ವರ್ಡ್ ಅನ್ನು argv ಮತ್ತು ಇತಿಹಾಸದಿಂದ ದೂರವಿಡಿ.
ನಾಲ್ಕು ಸಾಲಿನ here-document ಸಂಪೂರ್ಣ ನಾನ್-ಇಂಟರಾಕ್ಟಿವ್ ಲಾಗಿನ್ ಎಂಬ ನಂಬಿಕೆ ಇದೆ, ಮತ್ತು ಗೇಟ್ವೇ ಎರಡು ಗುಂಪುಗಳನ್ನು ನೀಡುವವರೆಗೆ, ಬ್ಯಾನರ್ ಮುದ್ರಿಸುವವರೆಗೆ ಅಥವಾ ಪಾಸ್ವರ್ಡ್ ನಂತರ ಟೋಕನ್ ಕೇಳುವವರೆಗೆ ಅದು ನಿಲ್ಲುತ್ತದೆ. ಆಗ ಅದೇ ಸ್ಕ್ರಿಪ್ಟ್ ಸಂಖ್ಯೆಯನ್ನು ನಿರೀಕ್ಷಿಸಿದ ಮೆನುವಿಗೆ ಪಾಸ್ವರ್ಡ್ ಟೈಪ್ ಮಾಡುತ್ತದೆ. Linux ನಲ್ಲಿನ ಕಮಾಂಡ್-ಲೈನ್ ಕ್ಲೈಂಟ್ ಸ್ಕ್ರಿಪ್ಟ್ ಮಾಡಬಹುದಾದದ್ದು, ಆದರೆ ಟ್ಯುಟೋರಿಯಲ್ ಊಹಿಸಿದ್ದಲ್ಲ, ಅದು ನಿಜವಾಗಿ ಕಾಯುತ್ತಿರುವುದನ್ನು ನೀಡಿದರೆ ಮಾತ್ರ.
ಸ್ಥಿರ here-document ಒಂದು ಕಟ್ಟುಕಥೆ
Cisco ನ Linux ಕ್ಲೈಂಟ್ /opt/cisco/anyconnect/bin/vpn ನಲ್ಲಿ ಸಣ್ಣ ಪ್ರೋಗ್ರಾಂ ಸ್ಥಾಪಿಸುತ್ತದೆ, ಮತ್ತು Secure Client 5 ಇನ್ನೂ ಅದನ್ನು ಒದಗಿಸುತ್ತದೆ. vpnagentd ಸೇವೆ ಚಾಲನೆಯಲ್ಲಿರುವಾಗ, -s ಫ್ಲ್ಯಾಗ್ ಕ್ಲೈಂಟ್ ಕೇಳುವ ಕ್ರಮದಲ್ಲೇ ಪ್ರಮಾಣಿತ ಇನ್ಪುಟ್ನಿಂದ ಉತ್ತರಗಳನ್ನು ಓದುತ್ತದೆ. ಆ ಕ್ರಮ ಸರ್ವರ್ಗಳ ನಡುವೆ ಸ್ಥಿರವಲ್ಲ.
ಗುಂಪು ಮೆನು ಒಂದು ಸಾಲು ಸೇರಿಸುತ್ತದೆ. ಲಾಗಿನ್ ಬ್ಯಾನರ್ ಇನ್ನೊಂದು ಸೇರಿಸುತ್ತದೆ. ಪಾಸ್ವರ್ಡ್ ನಂತರದ ಟೋಕನ್ ಕೋರಿಕೆ ನಾಲ್ಕು ಸಾಲಿನ ಸ್ಕ್ರಿಪ್ಟ್ ಅನ್ನು ಸಂಪೂರ್ಣವಾಗಿ ಒಡೆಯುತ್ತದೆ, ಏಕೆಂದರೆ ಐದನೇ ಸಾಲು ಎಂದಿಗೂ ಟೋಕನ್ ಆಗಿರಬೇಕಿರಲಿಲ್ಲ. ವೈಫಲ್ಯ ಮೌನವಾಗಿದೆ: ಕ್ಲೈಂಟ್ ತಪ್ಪು ಸ್ಟ್ರಿಂಗ್ ಪಡೆಯುತ್ತದೆ, ಸಂಪರ್ಕ ಪ್ರಯತ್ನ ಮುಗಿಯುತ್ತದೆ, ಮತ್ತು ಸ್ಕ್ರಿಪ್ಟ್ ಉಪಯುಕ್ತವಾದದ್ದನ್ನು ಏನೂ ವರದಿ ಮಾಡುವುದಿಲ್ಲ.
ಅದೇ ಗೇಟ್ವೇ ಮತ್ತು ಆವೃತ್ತಿಯ ವಿರುದ್ಧ ಕ್ಲೈಂಟ್ ಅನ್ನು ಒಮ್ಮೆ ಕೈಯಿಂದ ಚಲಾಯಿಸಿ, ಮತ್ತು ಪ್ರಾಂಪ್ಟ್ಗಳು ಬರುವ ಕ್ರಮದಲ್ಲೇ ಬರೆದಿಡಿ. ಆ ರೇಖನವೇ ನಿಮ್ಮ ಸ್ಕ್ರಿಪ್ಟ್ ಪೂರೈಸಬೇಕಾದ ವಿನಿರ್ದೇಶನ.
ಕ್ಲೈಂಟ್ ಯಾವುದಕ್ಕೆ ಕಾಯುತ್ತಿದೆ
ಸಾಮಾನ್ಯ ಏಕ-ಗುಂಪು ಸಂದರ್ಭದಲ್ಲಿ ಕ್ರಮ ಬಳಕೆದಾರ ಹೆಸರು, ಪಾಸ್ವರ್ಡ್ ಮತ್ತು ಕೆಲವೊಮ್ಮೆ ಬ್ಯಾನರ್ ದೃಢೀಕರಣ. here-document ನ ಮೊದಲ ಸಾಲು ಮೆನು ಸೂಚಿಯಾಗುವುದು ಸರ್ವರ್ ನಿಜವಾಗಿ ಮೆನು ತೋರಿಸಿದಾಗ ಮಾತ್ರ, ಮತ್ತು ಅದಕ್ಕೇ ಅದೇ ಸ್ಕ್ರಿಪ್ಟ್ ಒಂದು ಸ್ಥಳದಲ್ಲಿ ಕೆಲಸ ಮಾಡಿ ಮುಂದಿನದರಲ್ಲಿ ವಿಫಲವಾಗುತ್ತದೆ.
/opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net <<EOF
0
alice
$VPN_PASSWORD
y
EOF
ಇದನ್ನು ನಾಲ್ಕು ಸಂಭಾವ್ಯ ಪ್ರಶ್ನೆಗಳಿಗೆ ನಾಲ್ಕು ಉತ್ತರಗಳಾಗಿ ಓದಿ, ಸ್ಥಿರ ಪ್ರೋಟೋಕಾಲ್ ಆಗಿ ಅಲ್ಲ. ಶೂನ್ಯವು ಮೆನು ಆಯ್ಕೆ, ಪಾಸ್ವರ್ಡ್ ಅಲ್ಲ, ಮತ್ತು ಕೊನೆಯ y ಅನೇಕ ಗೇಟ್ವೇಗಳು ಎಂದಿಗೂ ಕಳುಹಿಸದ ಬ್ಯಾನರ್ ಅನ್ನು ಸ್ವೀಕರಿಸುತ್ತದೆ.
ಕ್ರಮ ಊಹಿಸಲಾಗದಿದ್ದಾಗ expect ಬಳಸಿ
ಪ್ರಾಂಪ್ಟ್ಗಳ ಕ್ರಮ ಬದಲಾದಾಗ, ಸಾಲುಗಳನ್ನು ಎಣಿಸುವುದನ್ನು ನಿಲ್ಲಿಸಿ ಮತ್ತು ಪ್ರಾಂಪ್ಟ್ಗಾಗಿ ಕಾಯಿರಿ. expect ಸ್ಕ್ರಿಪ್ಟ್ connect ಆಜ್ಞೆಯನ್ನು ಪ್ರಾರಂಭಿಸುತ್ತದೆ, ಬಳಕೆದಾರ ಹೆಸರಿನ ಪ್ರಾಂಪ್ಟ್ಗಾಗಿ ಕಾಯುತ್ತದೆ, ಕಳುಹಿಸುತ್ತದೆ, ಪಾಸ್ವರ್ಡ್ ಪ್ರಾಂಪ್ಟ್ಗಾಗಿ ಕಾಯುತ್ತದೆ, ಕಳುಹಿಸುತ್ತದೆ, ನಂತರ ಸಂಪರ್ಕಿತ ಸ್ಥಿತಿಗಾಗಿ ಕಾಯುತ್ತದೆ. ಪ್ರತಿ ನಿರೀಕ್ಷೆಗೂ ತನ್ನದೇ ಸಮಯ ಮಿತಿ ಇರುತ್ತದೆ.
ಸಮಯ ಮಿತಿ ಮುಗಿಯುವುದನ್ನು ವೈಫಲ್ಯವೆಂದು ಪರಿಗಣಿಸಿ ನಿರ್ಗಮಿಸಿ. ಅನಿರೀಕ್ಷಿತ ಪ್ರಾಂಪ್ಟ್ ನಂತರವೂ ಇನ್ಪುಟ್ ಕಳುಹಿಸುವ ಸ್ಕ್ರಿಪ್ಟ್ ಪಾಸ್ವರ್ಡ್ ಅನ್ನು ಸಂತೋಷದಿಂದ ಶೆಲ್, ಮೆನು ಅಥವಾ ಓದುತ್ತಿರುವ ಯಾವುದೇ ವಸ್ತುವಿಗೆ ಬರೆಯುತ್ತದೆ. ಹೀಗೆ ಲಾಗಿನ್ ಸ್ಕ್ರಿಪ್ಟ್ ಘಟನೆಯಾಗುತ್ತದೆ.
expect ರಹಸ್ಯವನ್ನು ತೆಗೆದುಹಾಕಿ ದಾಖಲಿಸಬಹುದಾದ ರೇಖನವನ್ನೂ ನೀಡುತ್ತದೆ, ಮತ್ತು ಅಪ್ಗ್ರೇಡ್ ನಂತರ ಗೇಟ್ವೇ ತನ್ನ ಪ್ರಾಂಪ್ಟ್ಗಳನ್ನು ಬದಲಿಸಿದಾಗ ಅದು ನಿರ್ಗಮನ ಕೋಡ್ಗಿಂತ ಹೆಚ್ಚು ಮೌಲ್ಯದ್ದು.
ರಹಸ್ಯ ಎಲ್ಲಾದರೂ ಇರಬೇಕು
ಈ ಸಮಸ್ಯೆಯ ಪ್ರತಿ ಆವೃತ್ತಿಯೂ ಒಂದು ದೌರ್ಬಲ್ಯವನ್ನು ಹಂಚಿಕೊಳ್ಳುತ್ತದೆ: ಪಾಸ್ವರ್ಡ್ ಕ್ಲೈಂಟ್ ಓದಬಲ್ಲ ರೂಪದಲ್ಲಿ ಇರಬೇಕು. ಅದನ್ನು ಆರ್ಗ್ಯುಮೆಂಟ್ ಆಗಿ ಕಳುಹಿಸುವುದು ಪ್ರಕ್ರಿಯೆ ಕೋಷ್ಟಕದಲ್ಲಿ ಬಹಿರಂಗಪಡಿಸುತ್ತದೆ. ಪೈಪ್ ಮೂಲಕ ಪ್ರತಿಧ್ವನಿಸುವುದು ಅದನ್ನು ಶೆಲ್ ಇತಿಹಾಸಕ್ಕೆ ಸೇರಿಸುತ್ತದೆ. ಎರಡನ್ನೂ ಹಂಚಿದ ಜಂಪ್ ಹೋಸ್ಟ್ನ ಇತರ ಸ್ಥಳೀಯ ಬಳಕೆದಾರರು ಓದಬಹುದು.
install -m 600 /dev/null ~/.vpn-secret
umask 077; VPN_PASSWORD=$(cat ~/.vpn-secret) /opt/cisco/anyconnect/bin/vpn -s connect vpn.example.net
ಖಾತೆಯ ಮಾಲೀಕತ್ವದ 600 ಮೋಡ್ನ ಫೈಲ್ ಕನಿಷ್ಠ, ಮತ್ತು ಅದೂ ಡಿಸ್ಕ್ನಲ್ಲಿ ಸರಳ ಪಠ್ಯದ ರಹಸ್ಯ. secret-tool lookup Linux ಕೀರಿಂಗ್ನಿಂದ ಓದುತ್ತದೆ, ಮತ್ತು macOS ನಲ್ಲಿ ಅದೇ ಕೆಲಸವನ್ನು security find-generic-password -w ಮಾಡುತ್ತದೆ. ಸಂಸ್ಥೆ ಪ್ರಮಾಣಪತ್ರ ಅಥವಾ SAML ದೃಢೀಕರಣವನ್ನು ಬೆಂಬಲಿಸುವಲ್ಲಿ ಅದನ್ನೇ ಆರಿಸಿ, ಏಕೆಂದರೆ ಸಂಗ್ರಹಿಸಿದ ಪಾಸ್ವರ್ಡ್ ಮತ್ತು MFA ಸೇರಿಯೂ ಮನುಷ್ಯನಿಲ್ಲದೆ ಲಾಗಿನ್ ಪೂರ್ಣಗೊಳಿಸಲಾರವು.
ಸುರಂಗವನ್ನು ದೃಢೀಕರಿಸಿ, ನಂತರ ಮುಚ್ಚುವಿಕೆಯನ್ನು ವಹಿಸಿಕೊಳ್ಳಿ
ದೋಷ ಪಠ್ಯ ಇಲ್ಲದಿರುವುದನ್ನು ನಂಬಬೇಡಿ. ಕ್ಲೈಂಟ್ನ ಸ್ಥಿತಿಯನ್ನು ಕೇಳಿ ಮತ್ತು ಇಂಟರ್ಫೇಸ್ ಅನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಪರಿಶೀಲಿಸಿ:
/opt/cisco/anyconnect/bin/vpn state
ip -brief address
ಸ್ಥಿತಿ Connected ಎಂದು ತೋರಿಸಬೇಕು, ಮತ್ತು ಸುರಂಗ ಇಂಟರ್ಫೇಸ್ಗೆ ವಿಳಾಸ ಇರಬೇಕು. ನಂತರ ಸುರಂಗ ತಲುಪಬೇಕಾದ ಒಂದು ಸಂಪನ್ಮೂಲವನ್ನು ಕೇಳಿ, ಏಕೆಂದರೆ ಮಾರ್ಗವಿಲ್ಲದ ಸಂಪರ್ಕಿತ ಸ್ಥಿತಿ ನಿಜವಾದ ಫಲಿತಾಂಶ ಮತ್ತು ಸುಲಭವಾಗಿ ಕಣ್ಣಿಗೆ ಬೀಳದ್ದು.
vpn disconnect ನಿಂದ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿ, ಮತ್ತು ಸುರಂಗವನ್ನು ಪ್ರಾರಂಭಿಸಿದ ಸ್ಕ್ರಿಪ್ಟ್ ಮುಚ್ಚುವಿಕೆಯ ಜವಾಬ್ದಾರಿ ತೆಗೆದುಕೊಳ್ಳಲಿ. ಸೆಷನ್ ತೆರೆದಿಟ್ಟು ವಿಫಲವಾದ ಕೆಲಸ ಒಂದು ಪರವಾನಗಿ ಸ್ಥಾನವನ್ನು ಬಳಸುತ್ತದೆ ಮತ್ತು ಮುಂದಿನ ಪ್ರಯತ್ನಿಸುವವರಿಗೆ ದೃಢೀಕರಣ ಸಮಸ್ಯೆಯಂತೆ ಕಾಣುತ್ತದೆ.
ಕೆಲಸದ ಕ್ರಮ: vpnagentd ದೃಢೀಕರಿಸಿ, ಪ್ರಾಂಪ್ಟ್ಗಳ ನಿಜವಾದ ಕ್ರಮವನ್ನು ದಾಖಲಿಸಿ, here-document ಅಥವಾ expect ಆರಿಸಿ, ರಹಸ್ಯವನ್ನು argv ಮತ್ತು ಇತಿಹಾಸದಿಂದ ದೂರವಿಡಿ, ಸ್ಥಿತಿ ಮತ್ತು ಒಂದು ಸಂಪನ್ಮೂಲವನ್ನು ಪರಿಶೀಲಿಸಿ, ನಂತರ ಅದೇ ಸ್ಕ್ರಿಪ್ಟ್ನಲ್ಲಿ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಿ.