Domanda

Sto eseguendo un paio di istanze Fedora standard su EC2. Sento che i nomi host pubblici delle istanze assegnate da Amazon sono troppo strani e difficili da ricordare. Vorrei cambiarli in qualcosa di corto (come rosso / blu / verde / ecc.)

C'è qualche svantaggio nel fare questo? E come posso impostarlo in modo tale che persista dopo il riavvio?

Grazie.

È stato utile?

Soluzione

Prima di iniziare, prova a eseguire hostname e hostname --fqdn e prendi nota delle risposte.

Puoi modificare / etc / hostname e impostare un nome host, che rimarrà dopo il riavvio. Puoi imporre che il nome host sia "ricaricato" usando hostname -F / etc / hostname per leggere quel valore nel nome host. Il prompt di bash cambierà dopo la disconnessione e l'accesso.

avvertenza / nota :
Sì, è bello avere il nome host nel prompt di bash impostato su qualcosa di più utile di ip-123-123-123-123 ma ho deciso di lasciare il mio (almeno per ora) perché sembra che molte cose contino davvero di avere il nome host su istanze ec2 impostato in modo standard. Dopo aver modificato / etc / hostname e aver cambiato il nome host in webserver molti servizi sembrano fallire perché il nome host non si risolveva e apache non si avviava. Successivamente ho modificato / etc / hosts e aggiunto in

127.0.0.1 webserver

come seconda riga. Apache avrebbe quindi iniziato ma si è lamentato del fatto che non è stato possibile trovare il nome FQDN. Ho confermato che l'esecuzione di hostname --fqdn non funzionava più.

Successivamente ho consultato man hostname e ho appreso che mentre è possibile impostare il hostname sembra che FQDN sia ciò che viene restituito tramite un DNS consultare.

  

IL FQDN

     

Non è possibile modificare il nome di dominio completo (come restituito dal nome host --fqdn) o il nome del dominio DNS (come restituito dal nome dominio) con questo comando. L'FQDN del sistema è il nome che il resolver (3) restituisce per il nome host.

     

Tecnicamente: il nome FQDN è il nome getaddrinfo (3) restituito per il nome host restituito da gethostname (2). Il nome del dominio DNS è la parte dopo il primo punto.

     

Pertanto dipende dalla configurazione (di solito in /etc/host.conf) come modificarla. Di solito (se il file hosts viene analizzato prima di DNS o NIS) è possibile modificarlo in / etc / hosts.

Penso che potrebbe essere possibile impostare il sistema / ingannare il sistema per restituire il nome di dominio completo, qualcosa come ip-123-123-123-123.ec2.internal anche se il nome host è < code> webserver ma a questo punto ha iniziato a sembrare più problemi di quanto ne valesse la pena, e che per me avere un prompt bash migliore potrebbe causare molti problemi di software e configurazione lungo la strada e quindi ho deciso di dare up.

Ho anche imparato che molte istanze di Amazon ec2 usano qualcosa chiamato cloud-init :

  

cloud-init è il pacchetto Ubuntu che gestisce l'inizializzazione anticipata di un'istanza cloud. È installato nelle Ubuntu Cloud Images e anche nelle immagini Ubuntu ufficiali disponibili su EC2.

     

Alcune delle cose che configura sono:

     
      
  • impostazione di una lingua predefinita
  •   
  • impostazione del nome host
  •   
  • genera chiavi private ssh
  •   
  • aggiunta di chiavi ssh ai .ssh / authorized_keys dell'utente in modo che possano accedere
  •   
  • impostazione di punti di montaggio effimeri
  •   
     

Il comportamento di cloud-init può essere configurato tramite dati-utente. I dati dell'utente possono essere forniti dall'utente al momento del lancio dell'istanza. Questo viene fatto tramite l'argomento --user-data o --user-data-file in ec2-run-instance

Ho anche trovato questo di cui parla come il nome host è configurato con cloud-init:

  

Nelle istanze EBS, un arresto e un successivo avvio finirebbero con un indirizzo IP diverso.

     

Nel caso in cui l'utente non abbia modificato / etc / hostname dal suo valore originale (seminato dal 'local-hostname' dei metadati), cloud-init imposterà nuovamente il nome host e aggiornerà / etc / hostname.

     

Nel caso in cui l'utente abbia modificato / etc / hostname, rimarrà gestito dall'utente.

     

Inoltre, se /etc/cloud/cloud.cfg contiene il valore 'preserv_hostname' impostato su un valore True, allora / etc / hostname non verrà mai toccato.

L'aspetto interessante è che se non cambi il nome host, il pacchetto cloud-init lo terrà aggiornato per te.

Se qualcun altro ha una soluzione alternativa o può risolvere alcuni dei problemi menzionati e aiutare a rassicurare che nulla si interromperà sulle istanze ec2 a causa della modifica del nome host, sarei felice di sentirlo.

Altri suggerimenti

Un altro modo è semplicemente modificare ~ / .bashrc e anteporre PS1 con il soprannome della macchina.

Modifica: forse più correttamente, a livello di macchina, ad es. sull'AMI di AWS Linux (un esempio) (incollalo nella console o aggiungi alla tua installazione arbitraria .sh):

cat << EOF | sudo tee /etc/profile.d/ps1.sh
if [ "$PS1" ]; then
  PS1="[\u@myinst1:\l \t \! \W]\\$ "
fi
EOF

Modifica / etc / sysconfig / network come root.

Sostituisci

HOSTNAME=localhost.localdomain

con

HOSTNAME=hostname.DOMAIN_NAME

Quindi, riavviare o eseguire /etc/init.d/network restart Il server dovrebbe quindi segnalare il suo nome come FQDN.

Da questo sito :

  

Modifica il nome host su un sistema in esecuzione

     

Su qualsiasi sistema Linux puoi cambiare il suo nome host con il comando hostname (sorpreso?) ...   Ecco alcuni rapidi utilizzi del nome host della riga di comando:

USER_DATA=`/usr/bin/curl -s http://169.254.169.254/latest/user-data`
HOSTNAME=`echo $USER_DATA`
IPV4=`/usr/bin/curl -s http://169.254.169.254/latest/meta-data/public-ipv4`
hostname $HOSTNAME
echo $HOSTNAME > /etc/hostname
gt; hostname NEW_NAME
gt; hostname --fqd
gt; hostname
     

senza alcun parametro genererà l'attuale nome host del sistema.

<*>      

genererà il nome di dominio completo (o FQDN) del sistema.

<*>      

imposterà il nome host del sistema su NEW_NAME .

Puoi anche modificare / etc / hostname (almeno su Ubuntu).

Per assicurarsi che rimanga dopo un riavvio in AWS, aggiungi il comando in /etc/rc.local in modo che venga eseguito all'avvio della macchina.

C'è anche un modo per set il nome host in modo dinamico tramite USER_DATA :

<*>

Per cambiare il nome host del sistema in un nome DNS pubblico

Segui questa procedura se hai già un nome DNS pubblico registrato

  1. Apri il file di configurazione / etc / sysconfig / network nel tuo editor di testo preferito e modifica la voce HOSTNAME in modo che rifletta il nome di dominio completo (come webserver.mydomain.com).

    HOSTNAME=webserver.mydomain.com
    
  2. Riavvia l'istanza per selezionare il nuovo nome host.

    [ec2-user ~]$ sudo reboot
    
  3. Accedi all'istanza e verifica che il nome host sia stato aggiornato. Il tuo prompt dovrebbe mostrare il nuovo nome host (fino al primo ". & Quot;) e il comando hostname dovrebbe mostrare il nome di dominio completo.

    [ec2-user@webserver ~]$ hostname
    webserver.mydomain.com
    

Per modificare il nome host del sistema senza un nome DNS pubblico

  1. Apri il file di configurazione / etc / sysconfig / network nel tuo editor di testo preferito e modifica la voce HOSTNAME in modo che rifletta il nome host del sistema desiderato (come webserver).

    HOSTNAME=webserver.localdomain
    
  2. Apri il file / etc / hosts nel tuo editor di testo preferito e aggiungi una voce che inizia con 127.0.1.1 (su sistemi DHCP) o l'indirizzo eth0 (su sistemi IP statici) per abbinare nell'esempio seguente, sostituendo il proprio nome host. (127.0.0.1 dovrebbe essere lasciato come linea localhost.)

    127.0.0.1   localhost localhost.localdomain
    127.0.1.1   webserver.example.com webserver
    
  3. Riavvia l'istanza per selezionare il nuovo nome host.

    [ec2-user@webserver ~]$ hostname
    webserver.localdomain
    
  4. Accedi all'istanza e verifica che il nome host sia stato aggiornato. Il tuo prompt dovrebbe mostrare il nuovo nome host (fino al primo ". & Quot;) e il comando hostname dovrebbe mostrare il nome di dominio completo.

    <*>

Nota: è anche possibile modificare il prompt della shell senza influire sul nome host. Consulta questa documentazione di AWS .

Certo, puoi farlo se hai il tuo dominio (imposta un CNAME in modo che punti al nome host Amazon). Altrimenti, sei praticamente bloccato con quello che ti danno (o un IP elastico, se ne hai impostato uno).

La soluzione /etc/rc.local ha funzionato per me per un nome host di base ma non mi fornisce un nome di dominio completo.

Nella mia AMI Linux (un'istantanea di altra istanza) .. nessuna delle formule sopra ha funzionato. Quindi, ho semplicemente cambiato il campo HOSTNAME nel file: /etc/init.d/modifyhostname e ho eseguito un normale riavvio.

Dovrai fare più cose per impostare il nome host:

  1. nome host newname - imposta il nome host, ma è volatile
  2. modifica / etc / hostname - imposta il nome host per il prossimo riavvio
  3. modifica / etc / hosts - per evitare che sudo si lamenti

Li ho messi insieme in uno script e l'ho caricato come una sintesi: https://gist.github.com/mnebuerquo/5443532036af8b48995547e2817dba85

Se non vuoi fare confusione con il tuo provider DNS, puoi usare gli alias per le tue istanze. Sono rimasto davvero sorpreso dal fatto che Amazon non abbia fornito un modo per dare un alias per un'istanza EC2 quando sono usciti con AWS Management Console , ma nel frattempo puoi utilizzare il servizio gratuito RightScale se vuoi la funzione alias - molto più facile che ricordare quegli ID istanza di Amazon.

sudo hostname *yourdesiredhostnamehere*

sudo /etc/init.d/networking restart

quindi il nome host viene modificato. Sul mio server funzionano tutti gli altri servizi come apache e postfix. Il server è Ubuntu 12.04 LTS

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top