GUI ਤੋਂ ਬਿਨਾਂ Linux ਸ਼ੈੱਲ ਤੋਂ Cisco Secure Client ਵਿੱਚ ਲੌਗਇਨ
here-ਦਸਤਾਵੇਜ਼ ਲੌਗਇਨ ਪ੍ਰੋਟੋਕੋਲ ਨਹੀਂ ਹੈ। ਅਸਲ ਪ੍ਰੋਂਪਟ ਕ੍ਰਮ ਰਿਕਾਰਡ ਕਰੋ, ਬਦਲਣ ’ਤੇ expect ਵਰਤੋ, ਅਤੇ ਪਾਸਵਰਡ argv ਤੇ ਇਤਿਹਾਸ ਤੋਂ ਬਾਹਰ ਰੱਖੋ।
ਵਿਸ਼ਵਾਸ ਇਹ ਹੈ ਕਿ ਚਾਰ ਲਾਈਨਾਂ ਵਾਲਾ here-ਦਸਤਾਵੇਜ਼ ਪੂਰਾ ਗੈਰ-ਇੰਟਰੈਕਟਿਵ ਲੌਗਇਨ ਹੈ, ਅਤੇ ਇਹ ਉਦੋਂ ਤੱਕ ਟਿਕਦਾ ਹੈ ਜਦੋਂ ਤੱਕ ਗੇਟਵੇ ਦੋ ਗਰੁੱਪ ਨਹੀਂ ਦਿੰਦਾ, ਬੈਨਰ ਨਹੀਂ ਛਾਪਦਾ, ਜਾਂ ਪਾਸਵਰਡ ਤੋਂ ਬਾਅਦ ਟੋਕਨ ਨਹੀਂ ਮੰਗਦਾ। ਉਦੋਂ ਉਹੀ ਸਕ੍ਰਿਪਟ ਪਾਸਵਰਡ ਉਸ ਮੀਨੂ ਵਿੱਚ ਟਾਈਪ ਕਰਦੀ ਹੈ ਜੋ ਸੰਖਿਆ ਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਸੀ। Linux ’ਤੇ ਕਮਾਂਡ-ਲਾਈਨ ਕਲਾਇੰਟ ਸਕ੍ਰਿਪਟ ਕਰਨ ਯੋਗ ਹੈ, ਪਰ ਸਿਰਫ਼ ਤਦ ਜੇ ਤੁਸੀਂ ਉਸਨੂੰ ਉਹ ਦਿਓ ਜਿਸਦੀ ਉਹ ਅਸਲ ਵਿੱਚ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ, ਨਾ ਕਿ ਉਹ ਜੋ ਟਿਊਟੋਰਿਅਲ ਨੇ ਮੰਨਿਆ ਸੀ।
ਸਥਿਰ here-ਦਸਤਾਵੇਜ਼ ਇੱਕ ਭੁਲੇਖਾ ਹੈ
Cisco ਦਾ Linux ਕਲਾਇੰਟ /opt/cisco/anyconnect/bin/vpn ’ਤੇ ਇੱਕ ਛੋਟਾ ਪ੍ਰੋਗਰਾਮ ਸਥਾਪਿਤ ਕਰਦਾ ਹੈ, ਅਤੇ Secure Client 5 ਅਜੇ ਵੀ ਇਸਨੂੰ ਭੇਜਦਾ ਹੈ। vpnagentd ਸੇਵਾ ਚੱਲਦੇ ਸਮੇਂ, -s ਫਲੈਗ ਕਲਾਇੰਟ ਦੇ ਮੰਗਣ ਦੇ ਕ੍ਰਮ ਵਿੱਚ ਮਿਆਰੀ ਇਨਪੁੱਟ ਤੋਂ ਜਵਾਬ ਪੜ੍ਹਦਾ ਹੈ। ਇਹ ਕ੍ਰਮ ਸਰਵਰਾਂ ਵਿੱਚ ਸਥਿਰ ਨਹੀਂ ਹੈ।
ਗਰੁੱਪ ਮੀਨੂ ਇੱਕ ਲਾਈਨ ਜੋੜਦਾ ਹੈ। ਲੌਗਇਨ ਬੈਨਰ ਇੱਕ ਹੋਰ ਜੋੜਦਾ ਹੈ। ਪਾਸਵਰਡ ਤੋਂ ਬਾਅਦ ਦੀ ਟੋਕਨ ਮੰਗ ਚਾਰ ਲਾਈਨਾਂ ਵਾਲੀ ਸਕ੍ਰਿਪਟ ਨੂੰ ਪੂਰੀ ਤਰ੍ਹਾਂ ਤੋੜ ਦਿੰਦੀ ਹੈ, ਕਿਉਂਕਿ ਪੰਜਵੀਂ ਲਾਈਨ ਕਦੇ ਟੋਕਨ ਨਹੀਂ ਬਣਨੀ ਸੀ। ਅਸਫਲਤਾ ਚੁੱਪ ਹੈ: ਕਲਾਇੰਟ ਨੂੰ ਗਲਤ ਸਟ੍ਰਿੰਗ ਮਿਲਦੀ ਹੈ, ਕਨੈਕਸ਼ਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਖ਼ਤਮ ਹੁੰਦੀ ਹੈ, ਅਤੇ ਸਕ੍ਰਿਪਟ ਕੋਈ ਲਾਭਦਾਇਕ ਰਿਪੋਰਟ ਨਹੀਂ ਕਰਦੀ।
ਕਲਾਇੰਟ ਨੂੰ ਇੱਕ ਵਾਰ ਉਸੇ ਗੇਟਵੇ ਅਤੇ ਵਰਜਨ ਵਿਰੁੱਧ ਹੱਥ ਨਾਲ ਚਲਾਓ, ਅਤੇ ਪ੍ਰੋਂਪਟ ਉਸ ਕ੍ਰਮ ਵਿੱਚ ਲਿਖੋ ਜਿਸ ਵਿੱਚ ਉਹ ਦਿਖਦੇ ਹਨ। ਉਹ ਟ੍ਰਾਂਸਕ੍ਰਿਪਟ ਹੀ ਉਹ ਵਿਸ਼ੇਸ਼ਤਾ ਹੈ ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰਿਪਟ ਨੂੰ ਪੂਰੀ ਕਰਨੀ ਹੈ।
ਕਲਾਇੰਟ ਕਿਸਦੀ ਉਡੀਕ ਕਰ ਰਿਹਾ ਹੈ
ਆਮ ਇੱਕ-ਗਰੁੱਪ ਮਾਮਲੇ ਵਿੱਚ ਕ੍ਰਮ ਵਰਤੋਂਕਾਰ ਨਾਮ, ਪਾਸਵਰਡ ਅਤੇ ਕਦੇ-ਕਦੇ ਬੈਨਰ ਦੀ ਪੁਸ਼ਟੀ ਹੁੰਦਾ ਹੈ। here-ਦਸਤਾਵੇਜ਼ ਦੀ ਪਹਿਲੀ ਲਾਈਨ ਸਿਰਫ਼ ਤਦ ਮੀਨੂ ਇੰਡੈਕਸ ਬਣਦੀ ਹੈ ਜਦੋਂ ਸਰਵਰ ਸੱਚਮੁੱਚ ਮੀਨੂ ਦਿਖਾਉਂਦਾ ਹੈ, ਇਸੇ ਲਈ ਉਹੀ ਸਕ੍ਰਿਪਟ ਇੱਕ ਥਾਂ ਚੱਲਦੀ ਹੈ ਅਤੇ ਅਗਲੀ ਥਾਂ ਫੇਲ ਹੁੰਦੀ ਹੈ।
/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-ਦਸਤਾਵੇਜ਼ ਜਾਂ expect ਚੁਣੋ, ਗੁਪਤ ਨੂੰ argv ਅਤੇ ਇਤਿਹਾਸ ਤੋਂ ਬਾਹਰ ਰੱਖੋ, ਹਾਲਤ ਅਤੇ ਇੱਕ ਸਰੋਤ ਜਾਂਚੋ, ਫਿਰ ਉਸੇ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਡਿਸਕਨੈਕਟ ਕਰੋ।