fb-pixel

SSHRC: come portare i tuoi alias ovunque

Pubblicato in:

by:

Se usi Linux usi sicuramente gli alias, ovvero le scorciatoie nel terminale.

Questi alias sono comodissimi e velocizzano il lavoro del sistemista. Un sistemista che usa gli alias (e le funzioni) sarà sempre più veloce ed efficiente di un sistemista che ogni volta scrive gli stessi comandi a mano.

Ovviamente appena ti colleghi a un server remoto con la connessione SSH non puoi usare gli alias che hai creato in bashrc sulla tua macchina. Per poter usare questi alias dovresti copiare il file bashrc sulla macchina remota.

In questo articolo andiamo a vedere come usare SSHRC per portarci dietro i nostri alias quando ci connettiamo a una macchina remota in modo da velocizzare il nostro lavoro.

Sshrc

Alias bashrc Linux e Mac

Voglio iniziare con una breve introduzione sugli alias.

Se usi Linux, ma anche se usi Mac, è molto probabile che usi spesso il terminale.

Ad esempio è probabile che usi spesso il comando:

ls -alh

Su Linux nella cartella home del tuo utente troverai un file chiamato .bashrc

File Bashrc Linux

Questo file contiene alcune direttive, possiamo aggiungere le nostre.

Ad esempio aprendo il file con un editor di testo come “vi” possiamo aggiungere degli alias.

Nel caso del Mac, di default invece di bash il terminale usa zsh, quindi il file da modificare sarà .zshrc. La sintassi resta la stessa, come anche la funzione.

Ad esempio posso aggiungere questa riga al file:

alias l='ls -lah'

A questo punto ogni volta che digiti “l” nel terminale è come se stessi digitando il comando per intero: ls -lah

Alias Linux In Locale

Va da sé che se hai dei comandi che usi in modo frequente, avere un alias velocizza il lavoro dal momento che devi digitare meno caratteri.

Tieni presente che dopo aver modificato il file .bashrc o il file .zshrc devi chiudere e riaprire il terminale per poter usare il tuo alias.

Adesso che abbiamo visto come possono tornarci utili gli alias vediamo come portarceli dietro quando ci connettiamo a un server remoto.

Se stai iniziando ad approcciarti all’uso del terminale potrebbe farti comodo la nostra lista dei 30 comandi Linux più usati.

SSHRC: cos’è e come possiamo usarlo

È stato creato originariamente da Russell Stewart (Russell91) che ha poi abbandonato il progetto, che adesso è mantenuto da Chris Down (cdown) su github. Trovi tutti i dettagli qui.

SSHRC è uno shell script che puoi installare facilmente sulla tua macchina Mac o Linux che ti permette di portare con te i tuoi alias e le tue funzioni per usarle su un server remoto.

Terminale

In pratica quando ti connetti usando il comando sshrc invece di ssh, questo script va a cercare il file .sshrc nella cartella home del tuo utente e si porta dietro tutti gli alias.

Normalmente per connetterti tramite SSH a un server remoto useresti il comando:

ssh [email protected]

Per usare SSHRC dovrai invece usare:

sshrc [email protected]

Usando questo comando, una volta connesso al server, avrai tutti i tuoi alias disponibili.

Vedremo poi come fare ad usare SSHRC usando il comando SSH, in pratica vedremo come usare SSHRC come metodo di default per connetterci ad un server remoto.

Come installare SSHRC

Nella repository di github che ho linkato nella sezione precedente trovi le istruzioni di installazione.

A me piace installarlo a mano, vediamo come.

Come prima cosa scarichiamo il file sshrc sulla nostra macchina:

wget https://raw.githubusercontent.com/cdown/sshrc/master/sshrc

Impostiamo i permessi in modo da renderlo eseguibile:

chmod +x sshrc

E lo spostiamo nella cartella /usr/local/bin sia che siamo su Linux che su Mac:

sudo mv sshrc /usr/local/bin

Adesso che abbiamo installato SSHRC e lo abbiamo reso eseguibile, andiamo a creare il file .sshrc.

Ci spostiamo quindi nella home del nostro utente e creiamo il file:

touch .sshrc

Adesso modifichiamo il file aggiungendo tutti gli alias di cui abbiamo bisogno, possiamo fare la prova con l’alias che ho indicato prima:

alias l='ls -lah'

Possiamo adesso connetterci usando SSHRC e portarci dietro i nostri alias.

Connessione SSH con SSHRC

Come accennavo prima, connetterci con SSHRC è facilissimo, in pratica è come usare il comando ssh:

sshrc [email protected]

Una volta che ti sei connesso al server, ti basterà digitare uno dei tuoi alias per assicurarti che funzioni.

Impostare SSHRC come metodo di default

Se credi che questo sistema sia valido e vuoi usarlo sempre, tanto vale impostarlo come default. In questo modo ogni volta che ti connetti usando SSH starai di fatto usando SSHRC.

Fare questo è facilissimo, non dobbiamo fare altro che impostare un alias nel nostro file .bashrc o .zshrc in questo modo:

alias ssh='sshrc'

In questo modo ogni volta che usi il comando ssh starai di fatto usando sshrc.

Nota: se hai degli alias che usano il comando ssh dovresti inserire questo alias prima degli altri.

Se per un qualche motivo decidi che per una specifica connessione vuoi usare il comando ssh normalmente ti basta inserire un backslash prima del comando. Inserire un backslash serve a non usare un alias se presente:

\ssh [email protected]

Usare il file .sshrc

Ognuno ha esigenze diverse, quindi ognuno avrà bisogno di un suo file .sshrc personalizzato.

Programmare

Se ti trovi a usare lo stesso comando diverse volte potrebbe essere il caso di creare un alias.

Se hai bisogno di lanciare uno script potresti decidere di creare una funzione.

In altri casi può essere utile creare degli alias con funzione di protezione.

Vediamo nel dettaglio.

Usare gli alias come protezione

I primi alias che ho creato li ho creati per evitare errori:

alias mv='mv -i'
alias cp='cp -i'
alias ln='ln -i'
alias rm='rm -i'

In questo modo prima di rimuovere o spostare un file e creare un problema, il server mi chiede una conferma, e sono in grado di evitare un errore per una svista.

Creare alias personalizzati

Come abbiamo visto prima possiamo creare degli alias personalizzati, che ci velocizzano nel digitare i comandi che usiamo in modo più frequente:

alias l='ls -lah'
alias grep='grep --color=auto'
alias fgrep='fgrep --color=auto'
alias egrep='egrep --color=auto'
alias vi="vim"
alias tailf='tail -f'
alias head='head -50'
alias fixperms='find ./* -type d -exec chmod --preserve-root 0755 {} + && find . -type f -exec chmod --preserve-root 0644 {} +'

Queste sono alcuni degli alias che ho impostato nel mio file.

Impostare funzioni

Possiamo anche creare dei veri e propri script, utilissimi per velocizzare il lavoro di tutti i giorni.

sh(){
	echo -n "Enter IP: "; read ip;  
	ssh root@$ip
}

Ad esempio questa funzione ci chiede un parametro, che una volta inserito viene usato come indirizzo IP per la connessione SSH.

Una funzione molto utile a mio avviso è questa:

intro () 
{ 
  #esegui varie operazioni
  echo "benvenuto Ivan";
}

intro

In pratica creiamo una funzione e la chiamiamo subito dopo. In questo caso specifico fa un echo di un semplice messaggio di benvenuto.

Io uso una funzione di questo tipo per vedere le versioni software sul server, il load e l’uso del disco.

Esempio di file .sshrc

Vediamo un file di esempio, che potrebbe essere utile come punto di partenza per creare il tuo file.

# Clear

alias c="clear"
alias cl="clear"
alias ckear="clear"
alias clr="clear"

# Change Directories

alias ..="cd .."
alias ...="cd ../.."
alias ....="cd ../../.."
alias .....="cd ../../../.."
alias ......="cd ../../../../.."

# Automatically do an ls after each cd
cd() {
  if [ -n "$1" ]; then
    builtin cd "$@" && ls --group-directories-first -al
  else
    builtin cd ~ && ls --group-directories-first -al
  fi
}

#============================================================= 
# cd & ls in one :- when you cd to a directory the ls command 
# automatically lists it's contents however you have configred 
# ls to do so:
#-------------------------------------------------------------

cl() {
if [ -d "$1" ]; then
   cd "$1"
   ls -la --group-directories-first --time-style=+"%d.%m.%Y %H:%M" --color=auto -F   
   else
   echo "bash: cl: '$1': Directory not found"
fi
}

#=============================================================
# cd & ls & more in the same command. Pipes the output to more 
#for use with directories with many files in their contents:
#-------------------------------------------------------------

# cd and ls & more in one
cm() {
if [ -d "$1" ]; then
   cd "$1"
   ls | more
   else
   echo "bash: cl: '$1': Directory not found"
fi
}

# Estimate file space usage to maximum depth

alias du1="du -d 1"

# History commands

alias h="history"
alias h1="history 10"
alias h2="history 20"
alias h3="history 30"
alias hgrep='history | grep'

# List commands

alias l='ls -lAh'
alias ls="ls -a"
alias la="ls -a"
alias ll="ls -al"

# Ping Commands

alias pg="ping google.com -c 5"
alias pf="ping facebook.com -c 5"
alias ping="ping -c 5"
alias fastping="ping -c 100 -s.2"

# Confirmation

alias rm='rm -Iv --preserve-root'
alias mv='mv -iv'
alias cp='cp -iv'
alias ln='ln -i'
alias chown='chown --preserve-root'
alias chmod='chmod --preserve-root'
alias chgrp='chgrp --preserve-root'

# Create a new directory and enter it

function mkd() {
    mkdir -p "$@" && cd "$@"
  }

# Install & Update utilties

alias sai="sudo apt install"
alias sai="sudo apt-get install"
alias sau="sudo apt update"
alias sau="sudo apt-get update"
alias update="sudo apt update"
alias update="yum update"
alias updatey="yum -y update"

# System state

alias reboot="sudo /sbin/reboot"
alias poweroff="sudo /sbin/poweroff"
alias halt="sudo /sbin/halt"
alias shutdown="sudo /sbin/shutdown"
alias flighton='sudo rfkill block all'
alias flightoff='sudo rfkill unblock all'
alias snr='sudo service network-manager restart'

# Show open ports

alias ports='sudo netstat -tulanp'

# Free and Used

alias meminfo="free -m -l -t"

# Get top process eating memory

alias psmem="ps auxf | sort -nr -k 4"
alias psmem10="ps auxf | sort -nr -k 4 | head -10"

# Get top process eating cpu

alias pscpu="ps auxf | sort -nr -k 3"
alias pscpu10="ps auxf | sort -nr -k 3 | head -10"

# Get details of a process

alias paux='ps aux | grep'

# Get server cpu info

alias cpuinfo="lscpu"

# Resume wget by default

alias wget="wget -c"

# Grabs the disk usage in the current directory

alias usage='du -ch | grep total'

# Gets the total disk usage on your machine

alias totalusage='df -hl --total | grep total'

# Shows the individual partition usages without the temporary memory values

alias partusage='df -hlT --exclude-type=tmpfs --exclude-type=devtmpfs'

# Gives you what is using the most space. Both directories and files. Varies on current directory

alias most='du -hsx * | sort -rh | head -10'

#functions

function extract () {
        if [ -f $1 ] ; then
                case $1 in
                        *.tar.bz2)        tar xjf $1                ;;
                        *.tar.gz)        tar xzf $1                ;;
                        *.bz2)                bunzip2 $1                ;;
                        *.rar)                unrar x $1                ;;
                        *.gz)                gunzip $1                ;;
                        *.tar)                tar xf $1                ;;
                        *.tbz2)                tar xjf $1                ;;
                        *.tgz)                tar xzf $1                ;;
                        *.zip)                unzip $1                ;;
                        *.Z)                uncompress $1        ;;
                        *)                        echo "'$1' cannot be extracted via extract()" ;;
                esac
        else
                echo "'$1' is not a valid file"
        fi
}

#trash

function trash(){
	if [ -z "$*" ] ; then
		echo "Usage: trash filename"
	else
		DATE=$( date +%F )
		[ -d "${HOME}/.Trash/${DATE}" ] || mkdir -p ${HOME}/.Trash/${DATE}
		for FILE in $@ ; do
			mv "${FILE}" "${HOME}/.Trash/${DATE}"
			echo "${FILE} trashed!"
		done
	fi
}

# find - exclude svn, git, mercurial, repo, eclipse and intellij idea directories
# usage : f [directory] [find-options]
f(){
  dir=$1
  shift
  find $dir -type d \( -name .svn -o -name .git -o -name .hg -o -name .repo -o -name .metadata -o -name .idea \) -prune -o $@ -print
}

pause() { 
	if $(killall -STOP "$1"); then 
		echo "[+] $1 successfully paused!"
	else 
		echo "[-] Failed to pause $1"
	fi 
}
 
unpause() { 
	if $(killall -CONT "$1"); then 
		echo "[+] $1 successfully unpaused!" 
	else 
		echo "[-] Failed to unpause $1" 
	fi 
}

Conclusioni

In questo articolo abbiamo visto cos’è SSHRC e come possiamo usarlo per velocizzare il nostro lavoro di sistemisti.

Già conoscevi questo sistema? Se sì come lo usi? Se no pensi possa esserti utile? Come lo useresti?

Fammelo sapere in un commento!


Prova gratis e senza impegno uno dei nostri piani hosting per 14 giorni. Non è richiesto nessun dato di pagamento!

Commenti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *