sshを使用して一部のマシンにログインすると、-aliasesとfunctionsが存在することを望みます。つまり、コマンドショートカットを使用できるようにしたいマシンにログインします。
動的である必要があります。ログインするたびに、エイリアスを更新したいです。
注:マシンやファイルがそこにない状態で、初めてログインすることがよくあります。シングルログインの場合もあります。そのマシンでは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 を使用して、リモートマシンにログインできます。これは自動的にtemp _.bashrc
_を使用します。更新された関数s()
:
_function s() {
scp ~/.bashrc $1:/tmp/.bashrc_temp
ssh -t $1 "bash --rcfile /tmp/.bashrc_temp ; rm /tmp/.bashrc_temp"
}
_
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を使用していても。より高度な設定については、読み続けてください。
jens-naは素晴らしい答えを提供しました。私は少し時間を費やして、少しだけうまく働くように少しやり直しました。この方法で、ポート番号などの任意のパラメーターをSSHに渡すことができます。違いは、異なるコマンドパラメータ名を使用するssh
ではなく、scp
コマンドを使用して.bashrc
ファイルをアップロードすることです。
また、別のファイル.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ソース」用です。ソースを取得しない場合はssh
を使用し、ソースを使用する場合はsshs
を使用します。
制限についてはわかりませんが、これを次のようなもので機能させることができました:
function ssh_with_rc() {
RC_DATA=`cat ${HOME}/.bashrc | base64 -w 0`
ssh -t $@ "echo \"${RC_DATA}\" | base64 --decode > /tmp/${USER}_bashrc; bash --rcfile /tmp/${USER}_bashrc; rm /tmp/${USER}_bashrc"
}
alias ssh="ssh_with_rc"
https://github.com/fsquillace/pearl-ssh が必要なことを実行すると思います。
私はsshrcが生まれるずっと前に書いており、sshrcに比べて多くの利点があります:
例えば:
$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl [email protected]
myserver.com $> q
exit
これが私が思いついたものです。通常のrcファイルを維持できますが、1つのssh接続ですべてを実行することもできます(つまり、最初にscpを実行するのではなく、一度ログインするだけで済みます)。
#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ファイルがどれくらいの大きさになるかはわかりません。ある時点で最大になる可能性があるからです。
単一のSSHセッションで機能させる1つのオプションは、変数を使用して、bashファイルをコピーするのではなく、保存することです。
$ mybash=`cat mybash`
$ ssh -t 127.0.0.1 "echo $mybash > /tmp/mybash; bash --rcfile /tmp/mybash ; rm /tmp/mybash"
私のために働くようです。
私はあなたのような問題を解決しようとしていましたが、私が本当に探しているのはsshfsであることに気付きました。多分あなたもそれを使うことができますか?
私の問題は、sshを実行するときに、リモートで作業している間、色、エイリアス、関数、スクリプトを保持したいということでした。