mac.sh 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/bin/bash
  2. [[ "$#" -ge "1" ]] || exit 1
  3. CERT_URL="${1:-}"
  4. CERT_PWD="${2:-}"
  5. CERT_TMP="/tmp/MacOS"
  6. # DO NOT EDIT
  7. [[ -n "${CERT_URL}" ]] || exit 1
  8. [[ "$(sudo whoami)" == "root" ]] || exit 1
  9. CERT_PWD=`echo "${CERT_PWD}" |tr -d ' '`
  10. USER_HOME=`echo "$HOME"`
  11. [[ -e "${USER_HOME}/.cisco" ]] && rm -rf "${USER_HOME}/.cisco"
  12. [[ -e "${USER_HOME}/.anyconnect" ]] && rm -rf "${USER_HOME}/.anyconnect"
  13. [[ ! -d "/opt/cisco/anyconnect/profile" ]] && mkdir -p "/opt/cisco/anyconnect/profile" && chmod 777 "/opt/cisco/anyconnect"
  14. cat >"${USER_HOME}/.anyconnect"<<EOF
  15. <?xml version="1.0" encoding="UTF-8"?>
  16. <AnyConnectPreferences>
  17. <DefaultUser></DefaultUser>
  18. <DefaultSecondUser></DefaultSecondUser>
  19. <ClientCertificateThumbprint></ClientCertificateThumbprint>
  20. <MultipleClientCertificateThumbprints></MultipleClientCertificateThumbprints>
  21. <ServerCertificateThumbprint></ServerCertificateThumbprint>
  22. <DefaultHostName></DefaultHostName>
  23. <DefaultHostAddress></DefaultHostAddress>
  24. <DefaultGroup>Default</DefaultGroup>
  25. <ProxyHost></ProxyHost>
  26. <ProxyPort></ProxyPort>
  27. <SDITokenType>none</SDITokenType>
  28. <ControllablePreferences>
  29. <AutoConnectOnStart>true</AutoConnectOnStart>
  30. <LocalLanAccess>true</LocalLanAccess>
  31. <BlockUntrustedServers>false</BlockUntrustedServers>
  32. <DisableCaptivePortalDetection>true</DisableCaptivePortalDetection>
  33. </ControllablePreferences>
  34. </AnyConnectPreferences>
  35. EOF
  36. chmod 777 "${USER_HOME}/.anyconnect"
  37. cp -f "${USER_HOME}/.anyconnect" "/opt/cisco/anyconnect/.anyconnect_global"
  38. chmod 777 "/opt/cisco/anyconnect/.anyconnect_global"
  39. cat >"/opt/cisco/anyconnect/profile/profile.xml"<<EOF
  40. <?xml version="1.0" encoding="UTF-8"?>
  41. <AnyConnectProfile xmlns="http://schemas.xmlsoap.org/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://schemas.xmlsoap.org/encoding/ AnyConnectProfile.xsd">
  42. <ClientInitialization>
  43. <UseStartBeforeLogon UserControllable="false">false</UseStartBeforeLogon>
  44. <StrictCertificateTrust>false</StrictCertificateTrust>
  45. <RestrictPreferenceCaching>false</RestrictPreferenceCaching>
  46. <RestrictTunnelProtocols>false</RestrictTunnelProtocols>
  47. <BypassDownloader>true</BypassDownloader>
  48. <AutoUpdate>false</AutoUpdate>
  49. <CertificateStore>All</CertificateStore>
  50. <CertificateStoreMac>All</CertificateStoreMac>
  51. <CertificateStoreLinux>All</CertificateStoreLinux>
  52. <CertificateStoreOverride>true</CertificateStoreOverride>
  53. <AuthenticationTimeout>16</AuthenticationTimeout>
  54. <WindowsVPNEstablishment>AllowRemoteUsers</WindowsVPNEstablishment>
  55. <LinuxVPNEstablishment>AllowRemoteUsers</LinuxVPNEstablishment>
  56. <CertEnrollmentPin>pinAllowed</CertEnrollmentPin>
  57. <CertificateMatch>
  58. <KeyUsage>
  59. <MatchKey>Digital_Signature</MatchKey>
  60. </KeyUsage>
  61. <ExtendedKeyUsage>
  62. <ExtendedMatchKey>ClientAuth</ExtendedMatchKey>
  63. </ExtendedKeyUsage>
  64. </CertificateMatch>
  65. </ClientInitialization>
  66. </AnyConnectProfile>
  67. EOF
  68. chmod 777 "/opt/cisco/anyconnect/profile/profile.xml"
  69. [[ -f "${CERT_URL}" ]] && cp -f "${CERT_URL}" "${CERT_TMP}.p12" || curl -ksSL -H "User-Agent: wget/1.0" -o "${CERT_TMP}.p12" "${CERT_URL}"
  70. if [[ -f "${CERT_TMP}.p12" ]]; then
  71. openssl pkcs12 -in "${CERT_TMP}.p12" -nodes -nokeys -nocerts -clcerts -cacerts -password pass:"${CERT_PWD}"
  72. [[ "$?" -ne "0" ]] && rm -rf "${CERT_TMP}.p12" && exit 1
  73. openssl pkcs12 -in "${CERT_TMP}.p12" -nodes -nokeys -clcerts -out "${CERT_TMP}_Cert.pem" -password pass:"${CERT_PWD}"
  74. openssl pkcs12 -in "${CERT_TMP}.p12" -nodes -nocerts -out "${CERT_TMP}_Key.pem" -password pass:"${CERT_PWD}"
  75. openssl pkcs12 -in "${CERT_TMP}.p12" -nodes -nokeys -cacerts -out "${CERT_TMP}_CA.pem" -password pass:"${CERT_PWD}"
  76. openssl pkcs12 -export -inkey "${CERT_TMP}_Key.pem" -in "${CERT_TMP}_Cert.pem" -certfile "${CERT_TMP}_CA.pem" -out "${CERT_TMP}_New.p12" -passout pass:NewCert
  77. security import "${CERT_TMP}_New.p12" -P "NewCert"
  78. if [[ "$?" -ne "0" ]]; then
  79. KEYCHAIN=`security login-keychain |cut -d'"' -f2`
  80. if [[ -n "${KEYCHAIN}" ]]; then
  81. security import "${CERT_TMP}_New.p12" -P "NewCert" -k "${KEYCHAIN}"
  82. [[ "$?" -ne "0" ]] && echo "Import Certificate Fail."
  83. else
  84. echo "Get login-keychain Fail."
  85. fi
  86. fi
  87. rm -rf "${CERT_TMP}.p12" "${CERT_TMP}_New.p12" "${CERT_TMP}_CA.pem" "${CERT_TMP}_Cert.pem" "${CERT_TMP}_Key.pem"
  88. exit 0
  89. fi
  90. exit 1