linux – リモートで .bash_profile をめちゃくちゃにしてしまいました

bash linux remote-access ssh

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

私は間違って $HOME/.bash_profile スクリプトに何かを追加してしまい、それがエラーの原因となってしまいました。(具体的には: . foo の代わりに exec foo コマンドを追加し、実行権限のない別の bash スクリプトに適用したところ、エラーになってしまいました)

私のログインシェルである bash は、exec fooコマンドを実行しようとすると、エラーが出て私を追い出します。他にリモートでアクセスできるアカウントを持っていません

アクセスを回復させるために何かできることはありますか?

Additional details:

  • マシンはファイアウォールの後ろにあるため、SSH以外のポートはほとんど利用できません
  • それはDevuan 3のASCII(~=Debian 10 Beowulf)系です

  70  None  2019-11-23


ベストアンサー

説明したように、こちらを使用することができます

ssh -t user@host bash --noprofile

実際には、@JoL が提案しているように、--noprofile は必要ありません。 ssh が bash を単なるコマンドとして実行する場合、ログインシェルとはみなされないからです。ssh -t user@host bash を実行すると RC ファイルだけが読み込まれ、ssh -t user@host bash --norc を実行するとそれすら読み込まれません

130  styrofoam fly  2019-11-23


SSHでbashの代わりにshを実行してみてください

ssh user@host sh

その後、名前を変更する(mv)か、壊れたファイルを編集する(ex/vi)

48  kenorb  2019-11-23


ssh -t host vi .bash_profile (または vi の代わりにお好みのエディタ) を実行して .bash_profile を修正してください

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

何を修正する必要があるかを正確に把握していれば、非インタラクティブに修正できるかもしれません。例えば、次のようなものです

printf 's/exec foo/. foo/\nwq\n' ssh host ed .bash_profile

20  chepner  2019-11-24


~/.bash_profileだけが混乱している場合は、それを修正するための他の回答を参照してください。この回答の残りの部分は、すべての(他の)ログインスクリプトを修正する方法を詳しく説明しています

不運にも ~/.bashrc~/.bash_profile の両方の先頭に echo Bad luck; exit 42 があり、ログインシェルとして /bin/bash を使用していて ssh root@host も動作しない場合、リモートで修正できる可能性は低いでしょう。sshd はログインシェルを実行することに固執し、最初の /bin/bash~/.bashrc~/.bash_profile のどちらかを読み取るからで、bash --norc --noprofile を指定しても手遅れです

~/.bashrcだけをぐちゃぐちゃにしてしまったのであれば、これを実行して修正してください

echo mv -f .bashrc .bashrc.mess | ssh host

もし、~/.bash_profileおよび/または~/.profileおよび/または~/.bash_loginだけをめちゃくちゃにしてしまった場合は、これを実行して修正してください

ssh host 'mv -f .bash_profile .bash_profile.mess; mv -f .profile .profile.mess; mv -f .bash_login .bash_login.mess'

修正後はいつものようにssh hostをして、ログインスクリプトファイルをお気に入りのエディタでクリーンアップしたり、scp、sftp、rsyncを使ってファイルを転送してローカルで編集したりします

1  pts  2019-11-26


タイトルとURLをコピーしました