Friday, December 08, 2006

Linux: Coping With Settings on Remote Systems

If you're like me, you probably end up working a lot on remote systems. It can be a pain to manage your settings on them. I think we all have a way of dealing with this. Ideally, we'd all manage our dot files in some publicly accessible source control. If you're a mere mortal like me, though, you just want a way to copy your dot files to the remote system and install your ssh key.

If so, then the following snippit from my .zshrc may be helpful to you. It's been tested with zsh, but probably works just fine in .bashrc. If you add to your .zshrc, remember to re-source that file or re-login. Edit to suit your tastes:
# Install my ssh key on a remote system.
ssh-installkey() {
[ -n "$1" ] || {
echo "usage: ssh-installkey username@host" >&2
return 1
}
ssh $1 "mkdir -p -m 700 .ssh"
ssh $1 "cat >> ~/.ssh/authorized_keys2" < ~/.ssh/id_dsa.pub
}

# Install some basic settings on the remote system for things like zsh, vim,
# and screen. Then, try to change shells.
#
# This does not call ssh-installkey because that command should not be executed
# multiple times. Call it first.
ssh-installsettings() {
[ -n "$1" ] || {
echo "usage: ssh-installsettings username@host" >&2
return 1
}
scp -r \
.zlogin .zshenv .zshrc \
.vim .vimrc \
.screenrc \
$1:
echo "Attempting to set login shell." >&2
ssh $1 "chsh -s /usr/bin/zsh"
}

2 comments:

bserge said...

A simple test for a public key, and I'm wondering if the authorized_keys2 works with more unixes than the authorized_keys. I'd rather go with the
authorized_keys for now as it's what is in my machines ...

This version works with bash, and makes me realize that connection to that HP box wasn't working since I didn't have any key there !!

This version needs to type twice the keyword, while the verbose ssh-copy-id command needs only one password :)

# Install my ssh key on a remote system.
ssh-installkey() {
test -n "$1" || {
echo "usage: ssh-installkey username@host" >&2
return 1
}
test -f $HOME/.ssh/id_rsa.pub || {
echo "You need a rsa public key. Run ssh-keygen to do that." >&2
return 1
}
ssh $1 "mkdir -p -m 700 .ssh"
ssh $1 "cat >> ~/.ssh/authorized_keys" < $HOME/.ssh/id_rsa.pub
}

Anonymous said...

After reading a Linux Journal article on keeping $HOME in CVS I put most of my command line configuration in CVS (vim, bash, zsh, mutt, xemacs, ssh (not the keys of course)). Since then I've moved from CVS to SVN and nowadays the first steps I take after arriving at a new system (with internet connectivity) are:

1. Check that SVN is installed.
2. 'svn co URL_to_my_SVN_repo ~/.user_cfg'
3. '~/.user_cfg/_tools/post_svn'
4. Log out and back in again.

Then I can enjoy my command line experience :-)