ਟੋਕਨ ਕੋਡ ਦੀ ਉਡੀਕ ਕਰਨ ਵਾਲੇ VPN ਲੌਗਇਨ ਨੂੰ ਕਿਵੇਂ ਸਵੈਚਾਲਿਤ ਕਰੀਏ
ਟਰਮੀਨਲ ਵਿੱਚ ਪੁੱਛਣ ਵਾਲਾ CLI VPN ਕਲਾਇੰਟ ਸਿਰਫ਼ ਪਾਸਵਰਡ ਪਾਈਪ ਕਰਨ ਵਾਲੀ ਸਕ੍ਰਿਪਟ ਨੂੰ ਰੋਕਦਾ ਹੈ। expect ਵੱਲ ਜਾਣ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਪੰਜ ਜਾਂਚਾਂ ਪੂਰੀਆਂ ਕਰੋ।
ਵਿਕਰੇਤਾ ਦੇ VPN ਕਲਾਇੰਟ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨ ਵਾਲੀ ਸਕ੍ਰਿਪਟ ਸਮਾਂ ਸੀਮਾ ਖ਼ਤਮ ਹੋਣ ਤੱਕ ਲਟਕਦੀ ਰਹਿੰਦੀ ਹੈ, ਅਤੇ ਲੌਗ ਦਿਖਾਉਂਦਾ ਹੈ ਕਿ ਕਲਾਇੰਟ ਉਹ ਤਸਦੀਕੀ ਕੋਡ ਮੰਗ ਰਿਹਾ ਹੈ ਜੋ ਕਿਸੇ ਨੇ ਟਾਈਪ ਨਹੀਂ ਕੀਤਾ। ਪਾਸਵਰਡ ਦਿੱਤਾ ਗਿਆ ਸੀ, ਇਸ ਲਈ ਸਪੱਸ਼ਟ ਸਿੱਟਾ ਇਹ ਹੈ ਕਿ ਪਾਸਵਰਡ ਗਲਤ ਹੈ। ਇਹ ਨਹੀਂ ਹੈ। ਕੋਡ ਦੀ ਬੇਨਤੀ ਵੱਖਰੇ ਚੈਨਲ ਉੱਤੇ ਵੱਖਰੀ ਗੱਲਬਾਤ ਹੈ, ਅਤੇ ਤੁਹਾਡੀ ਸਕ੍ਰਿਪਟ ਨੇ ਇਸਨੂੰ ਕਦੇ ਨਹੀਂ ਖੋਲ੍ਹਿਆ।
ਹੇਠਾਂ ਦਿੱਤੀਆਂ ਪੰਜ ਜਾਂਚਾਂ ਕ੍ਰਮ ਵਿੱਚ ਕਰੋ। ਪਹਿਲੀ ਅਸਫਲ ਜਾਂਚ ਉੱਤੇ ਰੁਕੋ, ਕਿਉਂਕਿ ਹਰ ਅਗਲਾ ਕਦਮ ਪਿਛਲਿਆਂ ਦੇ ਸਹੀ ਹੋਣ ਦੀ ਮੰਨਦਾ ਹੈ।
ਜਾਂਚ 1: ਕੀ ਕਲਾਇੰਟ ਮਿਆਰੀ ਇਨਪੁਟ ਪੜ੍ਹਦਾ ਹੈ?
ਕੋਈ ਵੀ ਸਵੈਚਾਲਨ ਲਿਖਣ ਤੋਂ ਪਹਿਲਾਂ ਪਰਖੋ: ਪਾਈਪ ਰਾਹੀਂ ਕਲਾਇੰਟ ਨੂੰ ਨਕਲੀ ਭੇਤ ਭੇਜੋ ਅਤੇ ਵੇਖੋ ਕੀ ਹੁੰਦਾ ਹੈ। ਜੇ ਇਹ ਆਪਣੀ ਬੇਨਤੀ ਛਾਪ ਕੇ ਫਿਰ ਉਡੀਕਦਾ ਹੈ, ਤਾਂ ਇਹ ਪਾਈਪ ਨਹੀਂ ਪੜ੍ਹ ਰਿਹਾ।
ਕਈ ਕਲਾਇੰਟ ਟਰਮੀਨਲ ਡਿਵਾਈਸ ਸਿੱਧਾ ਖੋਲ੍ਹਦੇ ਹਨ, ਜਾਂ ਗੈਰ-ਟਰਮੀਨਲ ਸਟ੍ਰੀਮ ਤੋਂ ਭੇਤ ਲੈਣ ਤੋਂ ਇਨਕਾਰ ਕਰਦੇ ਹਨ, ਤਾਂ ਜੋ ਭਟਕੀ ਪਾਈਪ ਪਾਸਵਰਡ ਲੀਕ ਨਾ ਕਰ ਸਕੇ। OpenVPN ਦਸਤਾਵੇਜ਼ੀ ਅਪਵਾਦ ਹੈ, ਕਿਉਂਕਿ --auth-user-pass ਫਾਈਲ ਮਾਰਗ ਲੈਂਦਾ ਹੈ। ਇੱਕ-ਵਾਰੀ ਕੋਡ ਮੰਗਣ ਵਾਲੇ ਵਿਕਰੇਤਾ ਕਲਾਇੰਟਾਂ ਵਿੱਚ ਆਮ ਤੌਰ ਤੇ ਬਰਾਬਰ ਦਾ ਵਿਕਲਪ ਨਹੀਂ ਹੁੰਦਾ, ਅਤੇ ਉਨ੍ਹਾਂ ਦੀ ਬੇਨਤੀ ਉਸ ਟਰਮੀਨਲ ਦੀ ਉਡੀਕ ਕਰਦੀ ਹੈ ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰਿਪਟ ਨੇ ਕਦੇ ਨਹੀਂ ਦਿੱਤਾ।
ਜਾਂਚ 2: ਕੀ ਚਾਈਲਡ ਪ੍ਰਕਿਰਿਆ ਕੋਲ ਟਰਮੀਨਲ ਹੈ?
pty ਚਾਈਲਡ ਨੂੰ ਟਰਮੀਨਲ ਦਿੰਦਾ ਹੈ, ਜੋ ਬੇਨਤੀਆਂ ਨੂੰ ਪੜ੍ਹਨਯੋਗ ਆਉਟਪੁੱਟ ਵਿੱਚ ਬਦਲਦਾ ਹੈ ਜਿਸ ਦਾ ਤੁਸੀਂ ਕ੍ਰਮ ਵਿੱਚ ਜਵਾਬ ਦੇ ਸਕਦੇ ਹੋ।
import pexpect
child = pexpect.spawn("openconnect vpn.example.net", encoding="utf-8", timeout=30)
child.expect("GROUP:")
child.sendline("staff")
child.expect("USERNAME:")
child.sendline("alice")
child.expect("PASSWORD:")
child.sendline(PASSWORD)
child.expect("Connected as", timeout=60)ਉੱਪਰ ਦਿੱਤੀਆਂ ਬੇਨਤੀ ਸਤਰਾਂ ਉਦਾਹਰਨ ਹਨ; ਤੁਹਾਡਾ ਕਲਾਇੰਟ ਜੋ ਸਹੀ ਟੈਕਸਟ ਛਾਪਦਾ ਹੈ ਉਹ ਅੱਖਰ ਅਕਾਰ ਅਤੇ ਵਿਰਾਮ ਚਿੰਨ੍ਹਾਂ ਸਮੇਤ ਕਾਪੀ ਕਰੋ। ਹਰ ਉਮੀਦ ਨਾਲ ਸਮਾਂ ਸੀਮਾ ਜੁੜੀ ਹੁੰਦੀ ਹੈ, ਅਤੇ ਬੰਦ ਚਾਈਲਡ ਸਥਿਤੀ ਵਾਪਸ ਕਰਨ ਦੀ ਬਜਾਏ ਅਪਵਾਦ ਸੁੱਟਦਾ ਹੈ, ਇਸ ਲਈ ਕ੍ਰਮ ਨੂੰ ਲਪੇਟੋ ਅਤੇ ਫਾਈਲ ਦੇ ਅੰਤ ਨੂੰ ਅਸਫਲਤਾ ਮੰਨੋ। ਧਿਆਨ ਦਿਓ ਇਹ ਬਲਾਕ ਕੀ ਨਹੀਂ ਕਰਦਾ: ਚਾਈਲਡ ਸਕ੍ਰਿਪਟ ਨਾਲ ਮਰ ਜਾਂਦਾ ਹੈ, ਕਿਉਂਕਿ pty ਵੱਖ ਕਰਨ ਦੀ ਕਾਰਵਿਧੀ ਨਹੀਂ ਹੈ ਅਤੇ disown ਸ਼ੈੱਲ ਦਾ ਅੰਦਰੂਨੀ ਹੁਕਮ ਹੈ ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰਿਪਟ ਵੱਲੋਂ ਬਣਾਈ ਪ੍ਰਕਿਰਿਆ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚ ਸਕਦਾ।
ਜਾਂਚ 3: ਕੀ ਸਮਰਥਿਤ ਗੈਰ-ਇੰਟਰਐਕਟਿਵ ਇਨਪੁਟ ਹੈ?
ਸਕ੍ਰੀਨ-ਸਕ੍ਰੈਪਿੰਗ ਕਲਾਇੰਟ ਅੱਪਗ੍ਰੇਡ ਵਿੱਚ ਟੁੱਟ ਜਾਂਦੀ ਹੈ, ਇਸ ਲਈ ਪਹਿਲਾਂ ਦਸਤਾਵੇਜ਼ੀ ਵਿਕਲਪ ਲੱਭੋ।
ਸਹਾਇਤਾ ਆਉਟਪੁੱਟ ਵਿੱਚ ਟੋਕਨ ਜਾਂ ਇੱਕ-ਵਾਰੀ ਕੋਡ ਦਾ ਵਿਕਲਪ ਵੇਖੋ, ਅਤੇ ਵੇਖੋ ਕਿ ਸੇਵਾ ਪਾਸਵਰਡ ਖੇਤਰ ਵਿੱਚ ਜੋੜਿਆ ਕੋਡ ਸਵੀਕਾਰ ਕਰਦੀ ਹੈ ਜਾਂ ਨਹੀਂ। ਜਿੱਥੇ ਕਲਾਇੰਟ ਪਛਾਣ ਪੱਤਰ ਫਾਈਲ ਪੜ੍ਹਦਾ ਹੈ, ਉੱਥੇ ਬੇਨਤੀ ਦੀ ਬਜਾਏ ਉਸਨੂੰ ਫਾਈਲ ਦਿਓ:
openvpn --config office.ovpn --auth-user-pass <(printf "%s\n%s\n" "$USER_NAME" "$PASSWORD")ਪ੍ਰਕਿਰਿਆ ਬਦਲੀ /dev/fd ਦੇਣ ਵਾਲੇ ਸਿਸਟਮਾਂ ਉੱਤੇ ਕਲਾਇੰਟ ਨੂੰ ਪੜ੍ਹਨਯੋਗ ਮਾਰਗ ਦਿੰਦੀ ਹੈ। ਭੇਤ ਕਲਾਇੰਟ ਦੀ ਨਜ਼ਰ ਵਿੱਚ ਅਜੇ ਵੀ ਭੇਤ ਹੈ, ਇਸ ਲਈ ਇਸਨੂੰ ਲੌਗ, ਸ਼ੈੱਲ ਇਤਿਹਾਸ ਅਤੇ ਪ੍ਰਕਿਰਿਆ ਸੂਚੀਆਂ ਤੋਂ ਦੂਰ ਰੱਖੋ। ਜੇ ਕਲਾਇੰਟ /dev/fd ਨੂੰ ਨਾਮਨਜ਼ੂਰ ਕਰਦਾ ਹੈ ਜਾਂ ਪਛਾਣ ਪੱਤਰ ਮਾਰਗ ਇੱਕ ਤੋਂ ਵੱਧ ਵਾਰ ਖੋਲ੍ਹਦਾ ਹੈ, ਤਾਂ ਸਖ਼ਤ ਇਜਾਜ਼ਤਾਂ ਨਾਲ ਅਸਲ ਫਾਈਲ ਲਿਖੋ ਅਤੇ ਉਸੇ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਉਹਨੂੰ ਮਿਟਾਓ।
ਜਾਂਚ 4: ਕੀ ਸੁਰੰਗ ਸਕ੍ਰਿਪਟ ਤੋਂ ਵੱਧ ਚਿਰ ਰਹੇਗੀ?
ਡਿਫ਼ਾਲਟ ਰੂਪ ਵਿੱਚ ਸੁਰੰਗ ਆਪਣੇ ਮਾਪਿਆਂ ਨਾਲ ਮਰ ਜਾਂਦੀ ਹੈ, ਜੋ ਬੂਟਸਟ੍ਰੈਪ ਸਕ੍ਰਿਪਟ ਨੂੰ ਲੋੜੀਂਦੇ ਦੇ ਉਲਟ ਹੈ।
disown -h ਸਿਰਫ਼ ਤਦ ਮਦਦ ਕਰਦਾ ਹੈ ਜਦੋਂ ਤੁਸੀਂ ਕਲਾਇੰਟ ਨੂੰ ਸ਼ੈੱਲ ਜੌਬ ਵਜੋਂ ਸ਼ੁਰੂ ਕੀਤਾ ਹੋਵੇ, ਕਿਉਂਕਿ ਇਹ ਉਸ ਸ਼ੈੱਲ ਦੀ ਜੌਬ ਸਾਰਣੀ ਸੋਧਦਾ ਹੈ ਅਤੇ ਤੁਹਾਡੀ ਸਕ੍ਰਿਪਟ ਵੱਲੋਂ pty ਰਾਹੀਂ ਬਣਾਈ ਪ੍ਰਕਿਰਿਆ ਤੱਕ ਨਹੀਂ ਪਹੁੰਚ ਸਕਦਾ। ਨਿਗਰਾਨੀ ਤੋਂ ਬਿਨਾਂ ਦੁਬਾਰਾ ਜੁੜਨ ਵਾਲੀ ਹਰ ਚੀਜ਼ ਲਈ ਸੇਵਾ ਪ੍ਰਬੰਧਕ ਵਧੀਆ ਥਾਂ ਹੈ, ਕਿਉਂਕਿ ਇਹ ਕਲਾਇੰਟ ਨੂੰ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰਦਾ ਹੈ ਅਤੇ ਕਿਉਂ ਮਰਿਆ ਇਹ ਦਰਜ ਕਰਦਾ ਹੈ। ਕਿਸੇ ਵੀ ਹਾਲਤ ਵਿੱਚ, ਹਰ ਦੁਬਾਰਾ ਜੁੜਨ ਤੋਂ ਬਾਅਦ ਨਵੇਂ ਕੋਡ ਦੀ ਉਮੀਦ ਰੱਖੋ: ਇੱਕ-ਵਾਰੀ ਟੋਕਨ ਪਹਿਲੀ ਸਫਲ ਪਛਾਣ ਵਿੱਚ ਖ਼ਰਚ ਹੋ ਜਾਂਦਾ ਹੈ।
ਧਿਆਨ ਦਿਓ sudo ਕ੍ਰਮ ਨਾਲ ਕੀ ਕਰਦਾ ਹੈ। sudo ਦੀ ਪਾਸਵਰਡ ਬੇਨਤੀ VPN ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਹੈ, ਅਤੇ ਉਸਨੂੰ VPN ਪਾਸਵਰਡ ਨਾਲ ਜਵਾਬ ਦੇਣਾ ਹੀ ਬਾਕੀ ਸਭ ਸਹੀ ਹੁੰਦਿਆਂ ਵੀ ਉਮੀਦਾਂ ਦਾ ਕ੍ਰਮ ਅਸਫਲ ਹੋਣ ਦਾ ਸਭ ਤੋਂ ਆਮ ਤਰੀਕਾ ਹੈ।
ਜਾਂਚ 5: ਕੀ ਕਿਸੇ ਵਿਅਕਤੀ ਦਾ ਕੋਡ ਸਕ੍ਰਿਪਟ ਵਿੱਚ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ?
ਇਹ ਉਹ ਜਾਂਚ ਹੈ ਜੋ ਲੋਕ ਛੱਡ ਦਿੰਦੇ ਹਨ। ਟੋਕਨ ਵਿਅਕਤੀ ਦਾ ਹੁੰਦਾ ਹੈ, ਜਦਕਿ ਸਮਾਂ-ਸਾਰਣੀ ਅਨੁਸਾਰ ਉੱਠਣ ਵਾਲੀ ਸੁਰੰਗ ਮਸ਼ੀਨ ਦੀ ਹੁੰਦੀ ਹੈ।
ਜੇ ਕਿਸੇ ਕੰਮ ਨੂੰ ਨਿਗਰਾਨੀ ਤੋਂ ਬਿਨਾਂ ਦੁਬਾਰਾ ਜੁੜਨਾ ਪੈਂਦਾ ਹੈ, ਤਾਂ ਪੁੱਛੋ ਕਿ ਮਸ਼ੀਨ ਸਰਟੀਫਿਕੇਟ ਜਾਂ ਸੇਵਾ ਖਾਤਾ ਇੰਟਰਐਕਟਿਵ ਲੌਗਇਨ ਦੀ ਥਾਂ ਲੈ ਸਕਦਾ ਹੈ ਜਾਂ ਨਹੀਂ। ਕਿਸੇ ਦਾ ਇੱਕ-ਵਾਰੀ ਕੋਡ ਸਵੈਚਾਲਿਤ ਕਰਨਾ ਦੂਜੇ ਕਾਰਕ ਨੂੰ ਸੰਭਾਲੇ ਭੇਤ ਵਿੱਚ ਬਦਲਦਾ ਹੈ, ਜੋ ਸਕ੍ਰਿਪਟਿੰਗ ਦੀ ਸੁਵਿਧਾ ਨਹੀਂ ਸਗੋਂ ਨੀਤੀ ਬਦਲਾਅ ਹੈ। ਜਿੱਥੇ ਸੇਵਾ ਦੋਵਾਂ ਨੂੰ ਸਮਰਥਨ ਦਿੰਦੀ ਹੈ, ਉੱਥੇ ਕੰਮ ਅਸਲ ਵਿੱਚ ਕਿਵੇਂ ਚੱਲਦਾ ਹੈ ਉਸ ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਪਛਾਣ ਚੁਣੋ। ਜਵਾਬ ਲਿਖ ਕੇ ਰੱਖੋ, ਕਿਉਂਕਿ ਅਗਲਾ ਵਿਅਕਤੀ ਪੁੱਛੇਗਾ ਕਿ ਸਕ੍ਰਿਪਟ ਟੋਕਨ ਕਿਉਂ ਰੱਖਦੀ ਹੈ।
ਕੰਮ ਕਰਦੀ ਸਕ੍ਰਿਪਟ ਕਿਹੋ ਜਿਹੀ ਦਿਸਦੀ ਹੈ
ਸਕ੍ਰਿਪਟ ਪਹੁੰਚਿਆ ਕਦਮ ਛਾਪਦੀ ਹੈ, ਭੇਤ ਕਦੇ ਨਹੀਂ, ਅਤੇ ਕੋਈ ਵੀ ਉਮੀਦ ਅਸਫਲ ਹੋਣ ਤੇ ਗੈਰ-ਸਿਫ਼ਰ ਕੋਡ ਨਾਲ ਬਾਹਰ ਨਿਕਲਦੀ ਹੈ।
ਜਾਣ-ਬੁੱਝ ਕੇ ਤੋੜ ਕੇ ਪਰਖੋ: ਗਲਤ ਪਾਸਵਰਡ, ਗਲਤ ਸਮੂਹ, ਮਿਆਦ ਪੁੱਗਿਆ ਟੋਕਨ। ਹਰ ਅਸਫਲਤਾ ਲਟਕਣ ਦੀ ਬਜਾਏ ਨਾਮ ਦਿੱਤੇ ਕਦਮ ਉੱਤੇ ਰੁਕਣੀ ਚਾਹੀਦੀ ਹੈ। ਫਿਰ ਅਸਲ ਸੇਵਾ ਦੇ ਸਾਮ੍ਹਣੇ ਇੱਕ ਵਾਰ ਚਲਾਓ ਅਤੇ ਸੁਰੰਗ ਨੂੰ ਸਕ੍ਰਿਪਟ ਤੋਂ ਬਾਹਰੋਂ ਜਾਂਚੋ, ਅੰਦਰੋਂ ਨਹੀਂ.