EC2サーバーにSSHで接続するときに無限のbashループ(bashrc + bash_profile)を変更する方法は?

EC2サーバーにSSHで接続するときに無限のbashループ(bashrc + bash_profile)を変更する方法は?

誤ってファイルにソースコードを埋め込み、その逆も同様です.bash_profilebashrcマシン(ec2)でsshを試みると、bashのロードが中断され、1秒以内に接続が閉じられます。修正する方法はありますか? bashファイルを変更するためにディスクを別のec2インスタンスにマウントできますか?


アップデート1:以下を試しました。

%  ssh -i "my-pem.pem" -t ubuntu@<server_address>.amazonaws.com "/bin/bash --noprofile --norc"
Connection to <server_address>.amazonaws.com closed.

他は現れません。何が問題なのかご存知ですか?

完全な確認のためにこれを行うと、ssh -i "my-pem.pem"ubuntu@<server_address>.amazonaws.comメッセージは次のようになります。

...

28 packages can be updated.
0 of these updates are security updates.
To see these additional updates run: apt list --upgradable

New release '20.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Last login: Mon Feb 22 23:17:41 2021 from ip
Connection to <server_address>.amazonaws.com closed.

解決策

マシンにSSH経由で接続し、Ctrlcすぐにbashファイルを修正してください。

ベストアンサー1

【書き直す】

この興味深いケースは、より良い回答を得る資格があります。スーパーユーザーへの答えです。)。

ssh user@server command以下の元の答えは、コマンドが非対話型シェルで実行されてエラーが.bashrc実行されるのを防ぐという事実に依存していました。

問題はリモートシェルにあります。 Bashの場合、次のrcファイルを実行できる特別な関数があります。

rshd(man bash)Bashは、リモートシェルデーモン(通常)またはセキュアシェルデーモンによって実行されるときなど、ネットワーク接続に接続されている標準入力を使用して実行されていることを確認しようとしますsshd。 bashがこのように実行されていると判断した場合~/.bashrc(ファイルが存在して読み取れる場合)、コマンドを読み込んで実行します。 shで呼び出すと、これは行われません。この --norcオプションを使用すると、この動作を抑制でき、他のファイル --rcfileを強制的に読み取るためにこのオプションを使用できますが、通常、シェルはこれらのオプションでrshd呼び出さsshdれるか、指定は許可されません。

つまり、リモートシェルがBashの場合、実行してもssh user@server 'rm .bashrc'コマンドが.bashrc最初に実行され、無限ループのためにrmコマンドは実行されません。

コマンドを呼び出して内部的に実行されるscpため、保存されません。sshdsh -c scp ...

唯一の例外はSFTPです。sshd組み込みSFTPサーバー。sshd外部サーバーの代わりにこの内部SFTPサーバーを使用するように構成されている場合、サーバーは起動しませんbash -c ...

scpしたがって、リモートベースシェルがBashの場合、唯一のオプションはsftp


[元の回答]

インストールに応じて、次のいくつかのオプションがあります。

ファイルを編集します.bashrc

ssh -t user@server 'vi ~/.bashrc'

bashファイルなしで実行.bashrc

ssh -t user@server '/bin/bash --noprofile --norc'

別のシェルを実行します。

ssh -t user@server /bin/sh

(は例です。またはなど、shサーバーで利用可能な他のシェルを試すことができます。)cshfish

ダウンロード - 編集 - アップロードに問題があります.bashrc

$ scp user@server:~/.bashrc /tmp/bashrc
$ vi /tmp/bashrc
$ scp /tmp/bashrc user@server:~/.bashrc

おすすめ記事