How to use/run bash aliases over ssh based session

$ ssh vivek@server1.cyberciti.biz file_repl

bash: file_repl: command not found

ADVERTISEMENTS



How to run or execute commands with Linux ssh client

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:How do I run bash shell aliases when I use ssh command?SSH client (ssh) is a Linux/Unix/macOS/*BSD 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.

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 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

How to run bash aliases using ssh client

Let us see command line syntax to run bash shell aliases using the ssh command under Linux, macOS, *BSD and Unix-like systems.

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. Without the -t option passed to the ssh, 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 as follows:

-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 /bin/bash -ic 'll'

Sample session:



#!/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' #!/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'

Conclusion

Here is my sample shell script:

You leanred how to run commands and bash shell aliases on a remote machine using the ssh command. For more info see OpenSSH client and bash man page by typing the following commands:

$ man ssh

$ man bash

$ help type

$ help command

Category List of Unix and Linux commands File Management cat Network Utilities dig • host • ip • nmap Package Manager apk • apt Processes Management bg • chroot • disown • fg • jobs • killall • kill • pidof • pstree • pwdx • time Searching grep • whereis • which User Information groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w