Inicia a VPN configurada a partir da linha de comando (OSX)

43

Eu tenho duas configurações de VPN no meu mac e gostaria de poder iniciá-las a partir do console quando eu ssh na minha máquina.

Eu encontrei o comando networksetup que me permite configurar conexões, mas até onde eu posso dizer, não iniciamos uma.

Usando o Lion.

    
por Ketema 17.11.2011 / 16:00

4 respostas

38

Para versões mais recentes do macOS, um comando muito simples pode ser usado, como mostrado nas respostas abaixo, por exemplo este (dê +1!).

Tudo que você precisa é:

 networksetup -connectpppoeservice "UniVPN"

O único problema é que você não pode desconectar usando este comando.

Você também pode usar o AppleScript para se conectar aos serviços VPN de sua escolha. Usaremos as funções do shell, que estão disponíveis na linha de comando, assim que forem carregadas.

Adicione as funções abaixo ao seu ~/.bash_profile ou ~/.profile (o que você usar).

Você só precisa alterar o nome da própria conexão VPN, conforme aparece nas preferências Rede . Eu usei minha universidade VPN aqui.

Vocêtambémpodealterarosnomesdasfunções,sequiserfazê-loparaoutrasdiferentes.Podeserpossívelencurtarissousandoargumentos,masfuncionamuitobemdessamaneira.EutesteinoSnowLeopard(masoLeopardeoLiontambémdevemfuncionar).

Depoisdeadicionarasfunções,recarregueoterminalechame-ascomvpn-connectevpn-disconnect,respectivamente.

functionvpn-connect{/usr/bin/envosascript<<-EOFtellapplication"System Events"
        tell current location of network preferences
                set VPN to service "UniVPN" -- your VPN name here
                if exists VPN then connect VPN
                repeat while (current configuration of VPN is not connected)
                    delay 1
                end repeat
        end tell
end tell
EOF
}

function vpn-disconnect {
/usr/bin/env osascript <<-EOF
tell application "System Events"
        tell current location of network preferences
                set VPN to service "UniVPN" -- your VPN name here
                if exists VPN then disconnect VPN
        end tell
end tell
return
EOF
}
    
por 17.11.2011 / 21:53
49

Você também pode, pelo menos no Lion 1 , usar o comando scutil.

Por exemplo, se eu tiver um serviço de VPN chamado "Foo", posso me conectar via:

$ scutil --nc start Foo

Como opção, posso especificar um usuário, senha e segredo usando sinalizadores com os mesmos nomes:

$ scutil --nc start Foo --user bar --password baz --secret quux

O serviço pode ser desconectado por meio de:

$ scutil --nc stop Foo

Para obter ajuda mais detalhada, você pode ver a página do manual ou executar:

$ scutil --nc help

Atualizar

Adicionando um script rápido para pesquisar até que a conexão seja estabelecida (em resposta ao comentário de Eric B.

#!/bin/bash

# Call with <script> "<VPN Connection Name>"

set -e
#set -x

vpn="$1"

function isnt_connected () {
    scutil --nc status "$vpn" | sed -n 1p | grep -qv Connected
}

function poll_until_connected () {
    let loops=0 || true
    let max_loops=200 # 200 * 0.1 is 20 seconds. Bash doesn't support floats

    while isnt_connected "$vpn"; do
        sleep 0.1 # can't use a variable here, bash doesn't have floats
        let loops=$loops+1
        [ $loops -gt $max_loops ] && break
    done

    [ $loops -le $max_loops ]
}

scutil --nc start "$vpn"

if poll_until_connected "$vpn"; then
    echo "Connected to $vpn!"
    exit 0
else
    echo "I'm too impatient!"
    scutil --nc stop "$vpn"
    exit 1
fi

Notas de rodapé:

  1. Não está claro quando este comando foi adicionado ao OSX, eu o tenho no Mavericks, e o usuário Eric B. relata que ele funciona no Lion (10.7.5).
por 02.04.2014 / 17:34
26

Ainda não testei isso no Lion, mas estou usando o seguinte comando no Mountain Lion sem nenhum problema:

networksetup -connectpppoeservice UniVPN
    
por 26.02.2013 / 01:43
0

Eu apenas usei o script acima por slhck (que é claramente um deus de ouro) para criar este script rubi bacana que poderia ser usado para todos os tipos de coisas

class SwitchIp

def go
  turn_off
  sleep 3
  turn_on
end

def turn_on
  '/usr/bin/env osascript <<-EOF
      tell application "System Events"
        tell current location of network preferences
            set VPN to service "StrongVPN" -- your VPN name here
            if exists VPN then connect VPN
      end tell
    end tell
  EOF' 
end

def turn_off
  '/usr/bin/env osascript <<-EOF
    tell application "System Events"
      tell current location of network preferences
            set VPN to service "StrongVPN" -- your VPN name here
            if exists VPN then disconnect VPN
      end tell
  end tell
 EOF'
end

end
    
por 16.10.2012 / 23:57