What's he up to?
SSH directly into remote virtual machines
From Kees van den Broek. June 16, 2009, No Comments
Host 6pp_vm is a virtual machine that runs on host kvdb.net. The usual steps for connecting to 6pp_vm from my laptop:
kvdb@laptop:$ ssh kvdb.net # Type password kvdb@kvdb:$ ssh 6pp_vm # Type password kvdb@6pp:$
The goal is a login process reduced to:
kvdb@laptop:$ ssh 6pp_vm kvdb@6pp:$
First, using OpenSSH’s ProxyCommand, an instant connection from laptop to 6pp_vm can be established.
Append these 2 lines to ~/.ssh/config on laptop:
Host 6pp_vm ProxyCommand ssh kvdb.net nc %h %p
Next, introduce password-less logins.
Generate a public and private DSA key pair on laptop (leave passprase empty):
kvdb@laptop: $ ssh-keygen -t dsa
Upload the public key to hosts kvdb.net and 6pp_vm.
kvdb@laptop: $ cat ~/.ssh/id_dsa.pub | ssh kvdb.net 'cat - >> ~/.ssh/authorized_keys' kvdb@laptop: $ cat ~/.ssh/id_dsa.pub | ssh 6pp_vm 'cat - >> ~/.ssh/authorized_keys'
In case you got a ‘No such file or directory’ error. First create the .ssh directory at 6pp_vm:
kvdb@6pp: $ mkdir ~/.ssh kvdb@6pp: $ chmod go-w ~/.ssh kvdb@6pp: $ chmod 600 ~/.ssh/authorized_keys kvdb@laptop: $ cat ~/.ssh/id_dsa.pub | ssh 6pp_vm 'cat - > ~/.ssh/authorized_keys'
Test the login from laptop to 6pp_vm (through kvdb.net):
kvdb@laptop:$ ssh 6pp_vm kvdb@6pp:$
Third, I like the prompt on 6pp_vm to be colored red when I’m connected through SSH, to remind me of the fact I’m working remotely.
Perform these commands on laptop:
# Placing a '\' in front of the escaping word prevents shell (variables) substitution. cat << \EOF | ssh 6pp_vm 'cat - >> ~/.bashrc' # Color the prompt RED when using BASH on a SSH connection if [ `echo $SSH_CLIENT | awk '{ print $1 }'` ] ; then RED="\[\033[0;31m\]" NORMAL="\[\033[0m\]" PS1="${RED}${PS1}${NORMAL}" fi EOF