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

