Permalänk
Medlem

Kommando i ett kommando?

Hej, lite rolig titel kanske men det är ett problem jag inte vet hur jag ska lösa. Vill kunna uppdatera min DNS via ett script som då behöver få tag i mitt IP.

Formatet är detta:

curl -s --user 'LOGINDETAILS' 'https://dyndns.citynetwork.se/nic/update?hostname=HOST&myip=IPGOESHERE'

Som jag förstått det ska man kunna sätta $(kommando) där IPGOESHERE är, men när jag tröck följande kod så skriker den "-bash: .*$//)": No such file or directory"

curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

Båda kommando funkar isär, men får dom inte att fungera ihop, vad är det jag missat?

Visa signatur

Desktop: AMD Ryzen 7 3700X / 48GB RAM / RX 6600 XT / 2TB SSD / Arch Linux
Server: Intel(R) i5-7400T / 32GB RAM / 21TB HDD / Proxmox

Permalänk
Skrivet av Kattus:

Hej, lite rolig titel kanske men det är ett problem jag inte vet hur jag ska lösa. Vill kunna uppdatera min DNS via ett script som då behöver få tag i mitt IP.

Formatet är detta:

curl -s --user 'LOGINDETAILS' 'https://dyndns.citynetwork.se/nic/update?hostname=HOST&myip=IPGOESHERE'

Som jag förstått det ska man kunna sätta $(kommando) där IPGOESHERE är, men när jag tröck följande kod så skriker den "-bash: .*$//)": No such file or directory"

curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

Båda kommando funkar isär, men får dom inte att fungera ihop, vad är det jag missat?

Om jag förstår rätt nu så vill du göra följande:

curl -s --user 'LOGINDETAILS' 'https://dyndns.citynetwork.se/nic/update?hostname=HOST&myip=$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')'

Du får syntax fel eftersom du måste escape single quotes i ditt sed kommando

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem
Skrivet av Rickybobby:

Om jag förstår rätt nu så vill du göra följande:

curl -s --user 'LOGINDETAILS' 'https://dyndns.citynetwork.se/nic/update?hostname=HOST&myip=$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')'

Du får syntax fel eftersom du måste escape single quotes i ditt sed kommando

Får samma felmeddelande med din kod.

Visa signatur

Desktop: AMD Ryzen 7 3700X / 48GB RAM / RX 6600 XT / 2TB SSD / Arch Linux
Server: Intel(R) i5-7400T / 32GB RAM / 21TB HDD / Proxmox

Permalänk

@Kattus:

Poängen var att du skulle fixa det själv när du nu vet vad felet är.

Visa signatur

i5 6700K @4.5GHz -Noctua NH-U14S -Asus Geforce GTX 980 Ti Strix DirectCU III -ASUS PRO GAMING Z170 -Crucial DDR4 16 GB -Crucial MX300 750GB -Corsair RM750i - NZXT H440W Silent Ultra - ASUS VC239 -Dell Professional P1914S IPS

Permalänk
Medlem

@Rickybobby
Ah, det missade jag lite, ska väl kanske lägga till att jag inte är någon höjdare på detta utan försökt skrapa ihop något fungerande från google. Hursom så blev det inte bättre med den nya varianten, verkar som den tar texten som input.

<p>Message: Bad request syntax ('GET /nic/update?hostname=test.catpanic.eu&amp;myip=$(curl -s checkip.dyndns.org | sed -e "s/.*Current IP Address: // HTTP/1.0').

Visa signatur

Desktop: AMD Ryzen 7 3700X / 48GB RAM / RX 6600 XT / 2TB SSD / Arch Linux
Server: Intel(R) i5-7400T / 32GB RAM / 21TB HDD / Proxmox

Permalänk
Medlem

@Kattus
Text inom enkelfnuttar/singlequote evalueras inte, så kör med vanliga dubbelfnuttar/citattecken kring din url istället så kommer saker fungera bättre.

curl -s --user 'LOGINDETAILS' "https://dyndns.citynetwork.se/nic/update?hostname=HOST&myip=$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')"

Visa signatur

The difference between stupidity and genius - the latter has limits

Permalänk
Medlem
Skrivet av Zevon:

@Kattus
Text inom enkelfnuttar/singlequote evalueras inte, så kör med vanliga dubbelfnuttar/citattecken kring din url istället så kommer saker fungera bättre.

curl -s --user 'LOGINDETAILS' "https://dyndns.citynetwork.se/nic/update?hostname=HOST&myip=$(curl -s checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')"

Tackar så hemskt mycket, detta gjorde exakt det jag hade önskat!

Visa signatur

Desktop: AMD Ryzen 7 3700X / 48GB RAM / RX 6600 XT / 2TB SSD / Arch Linux
Server: Intel(R) i5-7400T / 32GB RAM / 21TB HDD / Proxmox

Permalänk
Hedersmedlem

Ett lite snabbare sätt (främst då det räcker med ett DNS-uppslag, men det minimerar även skalforkar) vore att använda OpenDNS tjänst:

dig +short myip.opendns.com @resolver1.opendns.com

för att plocka IP-adressen (kräver som synes att dig är installerat).

Det finns även andra HTTP-baserade tjänster som ger enbart adressen utan uppmärkningskod, så som exempelvis

Ska du göra det i ett skript så kan det vara en bra vana att tilldela en variabel med IP-numret på en separat rad för att underlätta felsökning. Det ger dig också möjlighet att kontrollera att variabeln är "vettig" innan du skeppar den till City Network. Exempel som försöker separera användardata från City Networks API:

#!/bin/sh hostname="dittdomannamn.se" user="kontonamn" password="losenord" external_ip=$(dig +short myip.opendns.com @resolver1.opendns.com) curl -s --user "$user:$password" "https://dyndns.citynetwork.se/nic/update?hostname=$hostname&myip=$external_ip"

(otestat, men det visar troligen vad jag menar). Det kan som sagt vara trevligt att kontrollera att $external_ip exempelvis inte är tom innan kommandot körs för att kunna presentera ett trevligare felmeddelande.

Du skriver inte OS, men du kan även titta på projektet ddclient som existerar i paketet med samma namn på Debian-baserade distributioner (och troligen även fler) som sköter samma uppgift, men stöder fler tjänster, lägger sig fint i bakgrunden, håller reda på när uppdateringar behöver göras, etc. Ett alternativ till att återuppfinna hjulet, men ibland är det ju detta som är målet .

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem

@phz Tack för ditt välskrivna svar, dock ville jag inte installera flera packages, och även om jag faktiskt tittade på ddclient så fick jag det aldrig att funka. Dessutom funkar curl-scriptet jättebra och jag har lagt det i cron. Skulle det krångla någon gång får jag titta tillbaka hit och pröva din variant dock!

Kör i övrigt Debian Jessie.

EDIT: Inser att ditt script faktiskt var mycket bättre, samt jag hade visst "dig" installerat (scriptet fungerar även utmärkt)

Visa signatur

Desktop: AMD Ryzen 7 3700X / 48GB RAM / RX 6600 XT / 2TB SSD / Arch Linux
Server: Intel(R) i5-7400T / 32GB RAM / 21TB HDD / Proxmox