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