何らかのマシンにログインすると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
コマンドを使用してファイルをアップロードすることです。.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 Source」の略です。ssh
ソースを取得したくない場合は を使用し、sshs
ソースを取得する場合は を使用します。
答え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 ファイルのサイズがどのくらいになるかはわかりません。