私はしばしばリモートホストにSSHで接続する必要があり、bashオプションを使用するのが好きでset -o vi
、通常はcd
特定のディレクトリにログインする必要があります。これらのホストは一時ホストであるため(定期的に作成および削除される)、そのホストにログインして.bash_profile
保存することはできません.bashrc
。そのため、リモートサーバーに接続するたびに同じコマンドを入力する必要がないように、SSHを介して接続するときに何をすべきかを調べています。私はこれを達成するためにいくつかの方法を試しましたが、何も動作しないようです。誰でもこのコマンドを正しく実行するのに役立ちますか?一言で私がやりたいことはこれだ。
cd
特定のディレクトリへ- バッシュオプションの設定
set -o vi
私が試す方法は次のとおりです。
ssh [email protected] -t "cd /data; exec bash --login -c \"set -o vi\""
これはうまくいきますが、set -o vi
コマンドが実行されると、次のメッセージでセッションが切断されるため、SSHセッションは終了します。
Remotehost.comへの共有接続が閉じられました。
これらのコマンドを実行した後にセッションを開いたままにする方法はありますか、それとも目的を達成する他の方法はありますか?
答え1
いくつかのオプション:
ssh -t [email protected] 'cd /data && exec bash --login -o vi'
(POSIXユーティリティの標準オプションとしてksh
/ zsh
...を含むすべてのPOSIX様シェルで動作し、標準オプションの1つです。コマンドラインはBourne、csh、rc、fishなので、rootユーザーのログインシェルは何でも動作するはずです。 )dash
-o
sh
vi
または:
SSH-t[Eメール保護]'cd /data && exec env SHELLOPTS=vi bash --login'
実際、2番目のものを使用したくありません。これは$SHELLOPTS
、変数が環境内にあり、すべてのbash
呼び出しに影響を与えることを意味します(非対話型呼び出しは対話型シェルから呼び出しを継承するため、あらゆる種類の問題が発生します)。
また、bash
2つのオプションセットがあります。 1つは-o
/ settingsを使用し$SHELLOPTS
、もう1つは-O
/ settingsを使用します$BASHOPTS
。
答え2
2 つのコマンドを実行します。
- リモートホストで実行するコマンドをファイルに入れます
.bashrc.tmp
。 $ scp .bashrc.tmp [email protected]:
$ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"
これにより、ソースをバックアップする必要さえありません.bashrc
。
答え3
ホストのあるフォルダから別のフォルダに簡単に移動するには、apparixをインストールしてジャンプする必要がある複数の場所にブックマークを設定してから、to folderX
apparixで使用できます。https://micans.org/apparix/man/apparix.html
答え4
共有ユーザーIDでリモートシステムを使用しているため、起動ファイルを編集すると他のユーザーにも影響を与えるため、編集したくありません。しかし、ここであなたの投稿はvi
私が望むオプションを設定する方法を示しました。~/.ssh/config
ファイルに入れた内容です。
Host testsystem
User tester
RequestTTY yes
RemoteCommand exec /bin/bash --login -o vi
とても簡単です。 「cd」部分が何をしたいのかわかりません。