SSH 接続した先でもお気に入りのエイリアス設定とかを使いたい!「sshrc」のススメ

ssh コマンドで SSH 接続した先のサーバで、いつもローカル環境で使っているエイリアスや関数が使いたくなることは多々あるだろう。そんな時、接続先のサーバに毎回 .bashrcscp でアップロードするのは面倒だし、Dotfiles を GitHub 等からダウンロードしてきて設定したりするのも面倒だ。

そこで今回紹介するのは、sshrc というコマンドツール。コレをインストールすると、SSH 接続先に設定ファイルを持ち込んで、その設定ファイルを source してからプロンプトを起動する、ということが実現できるようになる。

目次

インストール方法

sshrc コマンドは、Mac の場合、Homebrew でインストールできる。

$ brew install sshrc

使い方

sshrc コマンドの基本的な使い方は ssh コマンドと同じ。-i オプションで SSH 鍵を指定したり、-p オプションでポートを指定したり、といったオプションも、裏側では全て ssh コマンドに横流しされている。

# こんな風に `ssh` コマンドと同じように使える
$ sshrc -i ~/.ssh/id_rsa -p 22 myuser@myserver.com

この時、接続先に持ち込まれる設定ファイルは、~/.sshrc というファイルを用意しておく必要がある。このファイルが置かれていないとコマンド実行時にエラーになる。

~/.sshrc に記述した内容は SSH 接続後に実行されるので、例えばローカル端末内の ~/.bashrc を読み込んで利用したい、と思って

# ~/.sshrc

source ~/.bashrc

こんな風に書いても上手くいかないので注意。このように書くと、SSH 接続先のサーバ内にある ~/.bashrc が読み込まれてしまうためだ。

仕方がないので、~/.sshrc の中に直接必要なエイリアスなどを書いておこう。ファイル全体が 64KB を超えるとアップロードしてもらえないので、あまり大量に書かないよう注意。

一例だが、僕はこんな ~/.sshrc を作った。

# ~/.sshrc

# Alias
alias quit='exit'
alias cls='reset'

# Function
function mkcd() {
  mkdir $* && \cd $_ && ls
}

# ls
alias la='ls -a'
alias ll='ls -l'
alias lal='ls -la'
alias lla='ls -la'
alias la1='ls -a -1'
alias ls1='ls -1'

# cd
alias ..='cdd ..'
alias ...='cdd ../..'
alias -- -='cd - && ls'
alias -- --='cd - && ls'

# grep
alias grep='grep --color'
alias grepinr='grep -inR'

コレでチョットベンリになった。

sshrc の中身はシェルスクリプトなので、コードリーディングしてみても面白いだろう。

参考文献