sbc - Use SSH Like a Boss!
sbc stands for Secure Back Channel and is a little tool to help you
using SSH sessions. It looks like
bcvi but is more secure in
the command execution process (it uses SSH and not a new non-crypted
non-authenticated protocol) and is very flexible for plugin creation (you can
create your plugin easily, using your preferred programming language). It is
tested on GNU/Linux and Mac OS X as client machines and any UNIX-like server,
with any shell.
Example use case: sometimes when you are in a
local-machine and connects via
SSH to a
remote-machine you need to copy some files between two machines,
run some time-consuming commands and other things.
sbc helps you in these
tasks so you don't need to open other terminal windows/SSH sessions to do it or
you can be notified when some tasks are done, for example.
Are you lazy? Watch the sbc screencast and learn how it works (note that the screencast is not up-to-date to to current code version).
First, you need to install sbc in your local and remote machines - you don't need root access in either machines, but need to run SSH daemon in both machines. After installing in both machines, let's setup sbc SSH key in the remote one:
user@local-machine:~$ sbc setup other-user@remote-machine [sbc] Generating SSH RSA key without password (/home/user/.ssh/sbc_rsa)... [OK] [sbc] Copying private key and sbc executables to remote server... [OK] [sbc] Executing sbc setup... [OK] [sbc] Updating local authorized_keys (if needed)... [OK]
Now your server is configured to run sbc! Let's copy a file
/tmp/some-file.txt) from the remote machine to the local machine, executing
a command in the remote machine - this command is just calling
First, let's check if there is no file called
/tmp/some-file.txt on local
user@local-machine:~$ ls /tmp/some-file.txt ls: cannot access /tmp/some-file.txt: No such file or directory
Ok, now we'll connect to remote server using
sbc ssh and list files in
remote home directory:
user@local-machine:~$ sbc ssh other-user@remote-machine [sbc] Creating back-channel and connecting... [OK] other-user@remote-machine:~$ ls some-file.txt
Now, copy the file to local machine's
/tmp and disconnect:
other-user@remote-machine:~$ sbc cp some-file.txt /tmp/ some-file.txt 100% 545 0.5KB/s 00:01 other-user@remote-machine:~$ exit [sbc] Closing back-channel... [OK] Connection to remote-machine closed.
...and check if the file was copied to local machine:
user@local-machine:~$ ls /tmp/some-file.txt /tmp/some-file.txt
When we execute
sbc ssh it creates a back-channel so the remote machine can
connect to the local machine through SSH. This back-channel is used to call
sbc plugins in local machine when you run
sbc plugin_name in remote
machine. All plugins are stored and run in your local machine - they are in
$HOME/.sbc/plugins and a plugin is just an executable file (yes, of course
you can use your preferred language to write one! ;-).
cp is only one of other cool plugins shipped by default with
example, if you want to edit a file stored in remote machine using an editor
running in your local machine (so you can use your own configuration files,
for example), you can use the plugins
see an example with gvim:
other-user@remote-machine:~$ sbc gvim some-file.txt
gvim in your local machine editing the file
/home/other-user/some-file.txt that is stored in the remote machine
- and you'll execute the command to call
gvim in the remote machine
(mind blowing? ;).
Now let's see another great plugin:
notify - it shows in your local
machine (generally near the clock) a notification sent by the remote
machine. It is handy in cases when you need to run time-consuming commands on
remote machine and don't want to "watch" every minute if the command finished.
A command is worth a thousand of words:
other-user@remote-machine:~$ tar -zcf /tmp/myhome.tar.gz ~/; sbc notify "hey, your targz was created!"
Copy the executable script
sbc to some directory in your
$PATH and the
$HOME/.sbc/. The following commands do
it for you (please read the commands before executing):
wget https://github.com/turicas/sbc/tarball/develop -O /tmp/sbc.tar.gz cd /tmp tar xfz sbc.tar.gz mkdir -p $HOME/bin $HOME/.sbc mv /tmp/turicas-sbc-*/sbc $HOME/bin/ mv /tmp/turicas-sbc-*/plugins $HOME/.sbc/ rm -rf /tmp/sbc.tar.gz /tmp/turicas-sbc-* chmod +x $HOME/bin/sbc line_to_add='PATH=$PATH:$HOME/bin' if [ -z "$(grep $line_to_add $HOME/.profile)" ]; then echo $line_to_add >> $HOME/.profile source $HOME/.profile fi