loading
Picture of Simple linux commands from a web page.
Screenshot-Bash CGI - Mozilla Firefox-11.png

There had to be a way to do simple commands for linux without going to the command line. The neat part to this project is that you can so easily expand it yourself. Need a directory listing. No problem. Need to know how the disk space is doing. No problem. This simple project will probably expand to a whole management system eventually. But in the mean time, here is just the basic structure which you can easily expand on. Also see http://www.instructables.com/id/Web-page-scraping-fromto-a-web-page/

Note: if you are on a terminal that does not have a terminal client, this project is a real lifesaver. This project makes it real easy for me to use a touchpad and check on my servers. No special client software necessary. Also this could be very easily adapted for the Apple Macintosh systems also since it is allegedly bsd based (a cousin of linux). Yes, control your "Mac" from a web page.

If you like this instructable, you might like this one also: http://www.instructables.com/id/Linux-screen-play/

Installed Arch linux on a pogoplug v2 and that is a wee bit different to set up the cgi-bin.

 
Remove these adsRemove these ads by Signing Up

Step 1: What's needed:

Picture of What's needed:
Human with a basic understanding of BASH (Bourne again shell).
                 http://www.freeos.com/guides/lsst/

Computer running Apache or other web server that supports the CGI (Common gateway interface).
  A Lamp (linux, apache, mysql, and php) server would be a good start.

Step 2: Extra program needed.

Picture of Extra program needed.
We need to create a simple program to list users for use with the system. So you need to create a file called lsuser with a text editor such as nano, vim, or whatever.

[code]
#=================================
# lsuser - list users
#=================================
# Assignments
# --------------------------------
datafile="/etc/passwd"
# end assignments

#=================================
#
# Data input
#---------------------------------
while read line
do echo $line | cut -d: -f1
done < $datafile
[/code]

Once the file is created we need to make it executable.

$ chmod +x lsuser

The we need to copy it to the usr program directory.

$ sudo cp lsuser /usr/bin/.

lsuser.txt272 bytes

Followed all instructions to the letter, when I place "bash.cgi" into /var/www/cgi-bin and try to access it via 127.0.0.1/cgi-bin/bash.cgi I get Internal server Error 500. 0.o I'm on Fedora 20 with the httpd package from YUM.

Ok I fixed this issue, now instead, when I go to the address, it tried to download the bash.cgi file, I think it's an error in the script itself, because when I try just "
#!/bin/sh
echo "Content-type: text/html\n"
echo
echo "Testing..."
it works fine.

Fixed this one on my own again.
Change the very first echo line to
echo -e "Content-type: text/html\n"

Worked like a charm.

Computothought (author)  SpiritlessAngel3 months ago

Interesting. never had to do that.

Computothought (author)  SpiritlessAngel7 months ago

My setup still works fine.

Computothought (author)  SpiritlessAngel7 months ago

You have to set up a directory specifically for doing the cgi bin and tell the web server configuration about it. The normal cgi-bin is not normally in /var/www. With apache 2.4 configuration files have changed, I have not had a chance to look at it yet, but a lot of things have changed.By the way I do not use the localhost address, I use the normal ipaddress.

In /etc/apache2/sites-available/000-default.conf

#ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
# <Directory "/usr/lib/cgi-bin">

<Directory "/var/www/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ChứcN7 months ago

Can use this for openwrt? I can control GPIO of router via ssh command, but i can not create web interface.

https://forum.openwrt.org/viewtopic.php?id=54555

Computothought (author)  ChứcN7 months ago

openwrt and luci has a cgi bin dir. You will need to install luci if you have not already done so. Embed your gpio command in the cgi script.

There must be a blank line between the HTTP header and the body. Also, you might want to serve up a complete html document.

#!/bin/sh 
echo "Content-type: text/html"
echo
echo "<html><head><title>hello world</title></head><body><p>It works!</p></body>"
ChứcN7 months ago

Can use this for openwrt? I can control GPIO of router via ssh command, but i can not create web interface.

https://forum.openwrt.org/viewtopic.php?id=54555

wdmc851 year ago

I don't have access to /var/www/cgi-bin/ when I try to access it through my browser and when I place the file elsewhere, it displays it as plain text. How can I fix this?

Computothought (author)  wdmc851 year ago

I know I responded to this. replay was missing. You need to make sure that the .txt extention is not used. secondly, you need to make sure the cgi is set up right. Do not know your setup, so it is hard to suggest anything. Also check your permissions.

-rwxr-xr-x 1 www-data www-data 3729 Jun 2 14:53 bashcgi1.cgi

Computothought (author)  wdmc851 year ago

Do not know which server you are using. You will want to go and check your cgi is installed correctly with correct permissions. Hint: look at the apache.conf file.