Running commands over SSH.
Have you ever wanted to send a command or a script to a remote computer without ever actually logging in to the shell? - well, SSH (Secure Shell) is your friend.
Let's say you would like to check your server process activity by using the "top" command, you would mostly perform the following steps in the Terminal:
- 👻 Run the command
ssh username@host
to log in to the system. - 👺 When prompted, run
top
to view process activity on the remote system. - 💀 Exit
top
and back to the remote command line. - 🎃
exit
to close the session.
This is the standard behavior and is good for performing system management tasks that take more than just a few steps, but sometimes you might only need to log in and run a single specific command or script and then exit so you no longer maintain a connection with the remote server.
Let's KISS (Keep this Short and Sweet) with a few examples. 👹 ☠️
Get the remote server kernel version and Linux distro names:
$ ssh -p 5111 gemini@192.168.1.111 lsb_release -a
gemini@192.168.1.111's password:
Distributor ID: Ubuntu
Description: X xxxx.xxx.xx
Release: xxxx.xxx.xx
Codename: xxxxxxxxx
Get the remote server date & time:
$ ssh -p 5111 gemini@192.168.1.111 date
gemini@192.168.1.111's password:
Fri 22 Oct 2021 01:58:54 PM UTC
Get the remote server date +%[format-option]
$ ssh -p 5111 gemini@192.168.1.111 date +"%d-%m-%y"
gemini@192.168.1.111's password:
22-10-21
Get the remote server disk space usage:
$ ssh -p 5111 gemini@192.168.1.111 'df -h'
gemini@192.168.1.111's password:
Filesystem Size Used Avail Use% Mounted on
udev 122.9G 0120.9G 0% /dev
tmpfs 584M 8.2M 576M 2% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 18G 9.6G 7.4G 57% /
tmpfs 2.9G 12K 2.9G 1% /dev/shm
tmpfs 5.0M 4.0K 5.0M 1% /run/lock
tmpfs 2.9G 0 2.9G 0% /sys/fs/cgroup
/dev/sda2 976M 203M 707M 23% /boot
tmpfs 584M 4.0K 584M 1% /run/user/1000
Sending multiple commands:
$ ssh -p 5111 gemini@192.168.1.111 'ls -l; ps -aux; whoami'
gemini@192.168.1.111's password:
....
..
.
-t Option
This option forces pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services, interaction. Multiple -t options force tty allocation, even if ssh has no local tty.
Below, we want to get the remote server number of ban IPs on crowdsec using the pipe |
redirection.
$ ssh -p 5111 gemini@192.168.1.111 -t 'sudo cscli decisions list | grep ban | wc -l'
Password:
Verification code:
[sudo] password for snubmonkey:
16
Connection to 192.168.1.199 closed.
Here, we want to interactively monitor the server's processes in real-time.
$ ssh -p 5111 gemini@192.168.1.111 -t 'htop'
Without the -t
you will get an error that reads as:
TERM environment variable not set or Error opening terminal: unknown.
Thank you for stepping by and Happy 2021 Halloween! 🎃