SSH経由でリモートサーバーにログオンするときにディレクトリを変更してbashオプションを設定するにはどうすればいいですか

SSH経由でリモートサーバーにログオンするときにディレクトリを変更してbashオプションを設定するにはどうすればいいですか

私は定期的に SSH 経由でリモート ホストにログオンする必要があり、bash オプションを使用するのが好きでset -o vi、通常はcd特定のディレクトリにログオンする必要があります。これらのホストは一時的なもの (定期的に作成および破棄される) なので、ログオンして / に保存する.bash_profileことはできませ.bashrcん。そこで、SSH 経由で接続するときにこれを実行して、リモート サーバーに接続するたびに同じコマンドを入力しなくても済むようにする方法を調べていました。これを実現するためにいくつかの方法を試しましたが、どれもうまくいかないようです。このコマンドを正しく実行するのを手伝ってくれる人はいませんか? 簡単に言えば、これが私がやりたいことです。

  1. cd特定のディレクトリに
  2. bashオプションを設定する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'

ksh(これは、 //zshを含むすべての POSIX ライクなシェルで動作しますdash。これ-oは POSIXshユーティリティの標準オプションであり、vi標準オプションの 1 つです。このコマンド ラインは、Bourne、csh、rc、fish を含むすべての主要なシェル ファミリのシェルとも互換性があるため、ルート ユーザーのログイン シェルに関係なく動作するはずです)

または:

ssh -t[メールアドレス]'cd /data && exec env SHELLOPTS=vi bash --login'

実際には、2 番目の変数は使用しないでください。つまり、$SHELLOPTS変数は環境内に存在し、すべてのbash呼び出しに影響します (非対話型の呼び出しは対話型シェルからの呼び出しを継承し、さまざまな問題を引き起こします)。

また、bashには 2 つのオプション セット (1 つは-o/で設定し、もう 1 つは/$SHELLOPTSで設定) があることにも注意してください。-O$BASHOPTS

答え2

コマンドを2つにします。

  1. リモート ホスト上で実行されるコマンドをファイルに格納します.bashrc.tmp
  2. $ scp .bashrc.tmp [email protected]:
  3. $ ssh <options> [email protected] "bash --login --rcfile ${HOME}/.bashrc.tmp"

この方法では、元のファイルをバックアップする必要さえありません.bashrc

答え3

ホスト上のフォルダーから別のフォルダーへのジャンプを簡素化するには、apparix をインストールし、ジャンプする必要があるさまざまな場所にブックマークを設定して、to folderXapparix で次のように使用します。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」の部分についてはわかりません。

関連情報