ローカルシェルエイリアスをSSHセッションに動的にロードする

ローカルシェルエイリアスをSSHセッションに動的にロードする

何らかのマシンにログインするとssh私は私のエイリアスそして機能あります。つまり、コマンド ショートカットを使用できるようにしたいマシンにログインします。

動的にする必要があります。ログインするたびにエイリアスが更新されることを望みます。

注: 多くの場合、これは初めてのログインであり、マシンとそこにあるファイルがわかりません。 シングル ログインの場合もあります。そのマシンに対して 1 回だけです。 その後はクリーンアップする必要があり、以前の構成も復元する必要があります。

答え1

.bashrcを別の名前でリモート マシンに一時的にコピーすることができます。たとえば、次のように使用します.bashrc_temp

user@local$ scp .bashrc user@remote:~/.bashrc_temp

その後、リモート マシンにログインできます。

user@local$ ssh user@remote

そしてsourceファイル.bashrc_temp

user@remote$ source ~/.bashrc_temp

これで、自分の機能を使用できるようになりました.bashrc。作業が完了したら、リモート マシン上のファイル ~/.bashrc_temp を削除してログアウトできます。

ファイルのコピーとリモート マシンへのログインは、bash 関数を使用して実行できます。

# copy the .bashrc to the remote machine 
# and log into the remote machine.
# parameter $1: user@remote
function s() {
  scp ~/.bashrc $1:~/.bashrc_temp
  ssh $1
}

アップデート:

をリモート マシンにコピーして、.bashrcをソースにコピーすることも検討してください。/tmp/tmp/.bashrc_temp

アップデート2:

リモートマシンにログインするには、ssh -t. これにより、自動的に一時ファイルが使用されます.bashrc。更新された機能s():

function s() {
  scp ~/.bashrc $1:/tmp/.bashrc_temp
  ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

答え2

あなたが探しているのは sshrc だと思います: https://github.com/Russell91/sshrc

sshrc は ssh と同じように動作しますが、リモートでログインした後に ~/.sshrc も取得します。

$ echo "echo welcome" > ~/.sshrc
$ sshrc me@myserver
welcome

$ echo "alias ..='cd ..'" > ~/.sshrc
$ sshrc me@myserver
$ type ..
.. is aliased to `cd ..'

これを使用して、環境変数を設定したり、関数を定義したり、ログイン後のコマンドを実行したりできます。非常に簡単で、サーバー上の他のユーザー (sshrc を使用している場合でも) には影響しません。より高度な設定については、引き続きお読みください。

答え3

jens-na さんが素晴らしい回答をしてくれました。私は少し時間をかけて、少し改良しました。こうすることで、ポート番号などの任意のパラメータを SSH に渡すことができます。違いは、異なるコマンド パラメータ名を使用するではなく、sshコマンドを使用してファイルをアップロードすることです。.bashrcscp

また、別のファイルをアップロードするので、.bashrc_remoteリモートサーバー上でソースにしたいものをすべてではなく正確に選択できます。

sshs() {
        ssh $@ "cat > /tmp/.bashrc_temp" < ~/.bashrc_remote
        ssh -t $@ "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}

次のように実行します。

sshs user@server

名前 ' sshs' は「SSH Source」の略です。sshソースを取得したくない場合は を使用し、sshsソースを取得する場合は を使用します。

https://gist.github.com/jonahbron/5549848

答え4

これが私が思いついた方法です。通常の rc ファイルを維持しながら、1 回の ssh 接続ですべてを実行できます (つまり、最初に scp を実行するのではなく、1 回ログインするだけで済みます)。

#copies some environment over to the remote machine
function ssh() {
  /usr/bin/ssh -t $* "echo `base64 -i ~/bin/remote_ssh_env.sh` | base64 --decode > /tmp/remote_ssh_env.sh; bash --rcfile /tmp/remote_ssh_env.sh"
}

ただし、ある時点で最大サイズに達する可能性があるため、rc ファイルのサイズがどのくらいになるかはわかりません。

関連情報