誤ってファイルにソースコードを埋め込み、その逆も同様です.bash_profile
。bashrc
マシン(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
ため、保存されません。sshd
sh -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
サーバーで利用可能な他のシェルを試すことができます。)csh
fish
ダウンロード - 編集 - アップロードに問題があります.bashrc
。
$ scp user@server:~/.bashrc /tmp/bashrc
$ vi /tmp/bashrc
$ scp /tmp/bashrc user@server:~/.bashrc