回答:
.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"
}
/tmp/
。これは、ログインするユーザーとして任意のコードを実行するために他のユーザーによって簡単に悪用される可能性があります。これはmktemp
、一時ファイルに一意の名前があることを確認するために使用する必要があります。
jens-naはすばらしい答えを提供してくれました。私は少し時間を費やして、少しだけ良くなるように少しやり直しました。このようにして、ポート番号などのパラメーターをSSHに渡すことができます。違いは、異なるコマンドパラメーター名を使用するの代わりに、ssh
コマンドを使用して.bashrc
ファイルをアップロードすることですscp
。
また、別のファイルをアップロードすることにも気付くでしょう。.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
します。
Pseudo-terminal will not be allocated because stdin is not a terminal
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を使用していてもです。より高度な構成については、読み続けてください。
vim $(which sshrc)
、bashファイルを確認できます。各行の後にechoコマンドを追加して、ハングする場所を確認できます。
制限についてはわかりませんが、次のようなものでこれを動作させることができました。
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"
RC_DATA
変数を回避する方法を見つけることです。
これが私が思いついたものです。通常の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ファイルの大きさは、どこかで最大になる可能性があるため、どれだけ大きいかわかりません。
https://github.com/fsquillace/pearl-sshが必要なことを行うと思います。
sshrcが生まれるずっと前に書いたので、sshrcと比べてより多くの利点があります。
例えば:
$> echo "alias q=exit" > ~/.config/pearl/sshrc
$> ssh_pearl myuser@myserver.com
myserver.com $> q
exit
私はあなたのような問題を解決しようとしていて、私が本当に探しているのはsshfsであることに気づきました。たぶんあなたもそれを使用できますか?
私の問題は、ssh'ingのときに、リモートで作業している間、色、エイリアス、関数、およびスクリプトを保持したいということでした。