How to use/run bash aliases over ssh based session

I

have set up a bash alias named file_repl. It works entirely when I log in using ssh command. However, my bash aliases are not running over ssh, for example:

$ ssh vivek@server1.cyberciti.biz file_repl

bash: file_repl: command not found

How do I run bash shell aliases when I use ssh command?

 

SSH client (ssh) is a Linux/Unix command for logging into a remote server and for executing shell commands on a remote system. It is designed to provide secure encrypted communications between two untrusted machines over an insecure network such as the Internet.

How to run or execute commands with Linux ssh client

To run a free command or date command with ssh:

$ ssh vivek@server1.cyberciti.biz date

 

Sample outputs:

Tue Dec 26 09:02:50 UTC 2017

OR

$ ssh vivek@server1.cyberciti.biz free -h

 

Sample outputs:

 

total        used        free      shared  buff/cache   available

Mem:           2.0G        428M        138M        145M        1.4G        1.1G

Swap:            0B          0B          0B

Understanding bash shall and command types

The bash shell understands the following types of commands:

Aliases such as ll

Keywords such as if

Functions (user defined functions such as genpasswd)

Built in such as pwd

Files such as /bin/date

The type command or command command can be used to find out a command type:

$ type -a date

date is /bin/date

$ type -a free

free is /usr/bin/free

$ command -V pwd

pwd is a shell builtin

$ type -a file_repl

is aliased to `sudo -i /shared/takes/master.replication

 

Both date and free are an external commands and file_repl is aliased to sudo -i /shared/takes/master.replication. One can not simply execute aliased command such as file_repl:

$ ssh user@remote file_repl

Bash aliases not running or working over ssh client on Unix based system

To solve this problem run ssh command as follows:

$ ssh -t user@remote /bin/bash -ic  your-alias-here

$ ssh -t user@remote /bin/bash -ic  file_repl

 

Where ssh command options:

-t : Force pseudo-terminal allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful. With the -t option you will get an error that read as “bash: cannot set terminal process group (-1): Inappropriate ioctl for device. bash: no job control in this shell.”

Where bash shell options:

-i : Make the shell is interactive so that it can run bash aliases

-c : Commands are read from the first non-option argument command_string. If there are arguments after the command_string, they are assigned to the positional parameters, starting with $0.

In short run the following command to run a bash aliases called ll:

$ ssh -t vivek@server1.cyberciti.biz -ic  ll

 

Sample session:

Running bash aliases over ssh based session when using Unix or Linux ssh cli

 

Here is my sample shell script:

#!/bin/bash

I= tags.deleted.410

O= /tmp/https.www.cyberciti.biz.410.url.conf

box= vivek@server1.cyberciti.biz

[ ! -f  $I  ] && { echo  $I file not found. ; exit 10; }

$O

cat  $I  | sort | uniq | while read -r u

do

uu= ${u##https://www.cyberciti.biz}

echo  ~^$uu 1;  >> ${O}

done

echo  Config file created at ${O} and now updating remote nginx config file

scp  ${O}  ${box}:/tmp/

ssh ${box} /usr/bin/lxc file push /tmp/https.www.cyberciti.biz.410.url.conf nginx-container/etc/nginx/

ssh -t ${box} /bin/bash -ic  push_config_job

References

For more info see OpenSSH client and bash man page by typing the following commands:

$ man ssh

$ man bash

$ help type

$ help command

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *