web-dev-qa-db-ja.com

リモートで.bash_profileを台無しにした、sshで戻れない

SSH経由でリモートでGNU/Linuxシステムを使用しています。

エラーを引き起こす$HOME/.bash_profile scriotに誤って何かを追加しました。 (具体的には、exec fooの代わりに. fooコマンドを追加し、実行権限のない別のbashスクリプトに適用したため、エラーが発生しました。)

今、私は自分のマシンにSSH、SCP、またはSFTPすることができないようです:bash、私のログインシェル、exec fooコマンドを実行しようとし、エラーを取得してスローします!リモートでアクセスできる他のアカウントを持っていません。

システムへのアクセスを復元するために私ができることはありますか?

さらなる詳細:

  • マシンがファイアウォールの背後にあるため、SSH以外のほとんどのポートは使用できません。
  • これはDevuan 3 ASCII(〜= Debian 10 Beowulf)システムです。
69
einpoklum

説明されているように here 使用できます

ssh -t user@Host bash --noprofile

実際、@ JoLが示唆しているように、--noprofile、sshがbashを別のコマンドとして実行する場合、ログインシェルとは見なされないため。ランニング ssh -t user@Host bashはRCファイルのみを読み取ります。実行中ssh -t user@Host bash --norcもそれらを読みません。

129
styrofoam fly

SSHを試し、shの代わりにbashを実行してください。

ssh user@Host sh

次に、名前を変更するか(mv)、壊れたファイルを編集します(ex/vi)。

48
kenorb

ssh -t Host vi .bash_profile(またはviの代わりに任意のエディター)を実行して、.bash_profileを修正します。

(選択するエディターによっては、-tオプションは必要ない場合があります。)

修正する必要があるものが正確にわかっている場合は、非対話的に修正できる場合があります。たとえば、次のようなもの

printf 's/exec foo/. foo/\nwq\n' ssh Host ed .bash_profile
20
chepner