だから、誰かが.bashrc
に何かを打ち込んだとすると、彼(または彼女)はssh
を介してログインできなくなります(つまり、ファイルのエラーが原因でsshログインが終了します) )。それを実行せずにログインする方法(または.bashrc
が他を実行するため)、またはファイルを削除/名前変更/無効化する方法はありますか?
マシンに物理的にアクセスできないとします。これは、sshを実行できる唯一のユーザーアカウントです。
参照用:.bash_profile
には.bashrc
が含まれます:
[[ -f ~/.bashrc ]] && . ~/.bashrc
編集:私が試したもの:
ssh user@Host "rm ~/.bashrc"
scp nothing user@Host:/RAID/home/tom/.bashrc
ssh user@Host "/bin/bash --norc"
すべてエラーを出します:
/RAID/home/tom/.bashrc: line 16: /usr/local/bin/file: No such file or directory
/RAID/home/tom/.bashrc: line 16: exec: /usr/local/bin/file: cannot execute: No such file or directory
私はあなたの唯一の選択肢は次のとおりだと思います:
別のユーザーとしてsshでログインし、アカウントにsuします。
ホストで関連サービスが有効になっている場合は、ftpやsmbclientなどを使用します。
オープンネットワークサービスにオープンな脆弱性を見つけ、それを悪用します:)。
管理者に問題を修正してもらいます。
ssh -t username@hostname /bin/sh
は私のために働きます。
私も同じ問題を抱えていて、どういうわけかそれを解決することができました。私はsshを使用してシステムにアクセスし、システムにログインしたらすぐにCtrl + cを押し続けました。その後、〜/ .bashrcが読み込まれず、変更することができました。
公開したCVEを使用して、インストールしたネットワーク監視ソフトウェアのWebインターフェイスからrootとしてコマンドを実行しました。 rm /RAID/home/tom/.bashrc
次に、ログインしてsvnで変更を元に戻します。
A)開始する必要がありますbashsource
を使用せずに~/.bashrc
または~/.bash_profile
およびb)そのようなシェルは完全なログインシェルにはならないため、シェルには/ttyがアタッチされていないため、sshにttyを強制的にアタッチします。 :
ssh -t user@Host bash --norc --noprofile
あなたは運が悪い。
すべてのsshコマンドは、ログインシェルを実行します。 ssh $COMMAND
実行$Shell -c $COMMAND
、scp
実行$Shell -c /path/to/sftp-server
、プレーンssh
はシェルを実行するだけです。
上記の回答はいずれも、sshのログインシェルをバイパスできません。完全なコマンドラインを渡すと、リモートシェルが実行されてコマンドが処理され、コマンドの作業環境が設定されます。これがシェルの目的であり、Unixの方法です。シェルなしで何かを実行しようとすると、あらゆる種類の互換性の問題が発生します。同様に、control-Cを試すことは、回避しようとしている動作であるexitを呼び出すことと同じです。 bashがバグを続ける場合。なぜ人々は、マンページには何も言っていないので、それを引用する必要がある別のことを言っていると人々が言い続けるのはなぜですか。
さらに、ほとんどのLinuxシステムでは、/ bin/shを指定しても何も起こりません。これはbashへのシンボリックリンクにすぎないためです。
テストしたいですか? 「echo」ステートメントを.bashrcと.profileに追加して、どちらが実行されるかを確認します。やった。結果は次のとおりです。
ssh user@Host
は.bash_profileを実行しますssh user@Host /bin/bash
は.bashrcを実行しますが、非インタラクティブ(プロンプトなし)と見なします。 ssh -t user@Host /bin/bash
は.bashrcを2回実行します...ログイン時に1回、渡されたコマンドに対して1回実行するため、ANY Shellを指定すると常に最初に実行されます。 ssh -T user@Host
は、-Tまたは-tをまったく指定しないのと同じです。
さて、気づいたら、MYシステムは両方のファイルを実行しておらず、どちらか一方のみを実行しています。ただし、元のポスターの.bashrcを実行している.bash_profileに行があるため、.bashrcは何があっても常に実行されます。そこにその行を置くべきではありませんでした!その行が存在しなければ、問題はなかったでしょう。
別の方法を見つけるか、管理者を見つける必要があります。これが管理者の目的です。
何かのようなもの:
ssh Host "/bin/bash --norc"
これは機能しているようですが、PS1が設定されていないため、プロンプトなしでコマンドを入力することに注意してください。
これには、非破壊的な利点があります。
ssh -t user@Host "bash --norc --noprofile -c '/bin/rm .bashrc'"
試す
echo ^C | ssh <hostname> ' rm .bashrc'
^ C control-vの次にc
.bashrcが終了する前にctrl-Cを取得できる限り、ctrl-Cのマッシングが機能します。残念ながら、exit
が.bashrcの初期にある場合、これを行うのは難しい場合があります。
直接sshにパイプすることで、できるだけ早くctrl-Cを配置できます。
{ echo ^C; cat /dev/tty; } | ssh -tt user@Host
ご了承ください ^C
はctrl-Vの後にctrl-Cが続くように入力されます。
これは、単一のctrl-Cをパイプ処理し、その後に制御端末からの入力を続けますが、-tt
は、疑似端末を強制的に割り当てます。これは、可能な限り多くの.bashrcをバイパスする一方で、リモートマシン上に(多少不正な形式の)シェルを提供することを伝えています。
UH = 'user @ Host'; ssh $ UH 'mv〜/ .bashrc〜/ letmein'; ssh $ UH
カットして実行せず、user
とHost
を変更してから、letmein
を編集して.bashrc
として保存してください
scp
コマンドを使用して、.bash_profile
を空のファイルで上書きしようとすることができます。私がグーグルで調べたことから、scpは.bash_profile
を読み取らない非インタラクティブログインを使用します。
Bashrcファイルを削除することもできます:
ssh <hostname> rm ~/.bashrc
システムが正常にセットアップされている場合、非対話型シェル(コマンドの実行など)に対して.bash_profileは実行されません。
問題は.bash_profileファイルにあると述べているので、それを邪魔にならない場所に移動してみてください。
ssh user@Host "mv ~/.bash_profile ~/.bash_profile_broken"
User60069への称賛、それは私にとってはうまくいきましたが、私はシェル固有の起動ファイル.bashrcを使用しているので、/ bin/shでのログインは私にとってうまくいきました。
ただし、「そのような運がない」状況にある場合は、user60069とDennis Wのソリューションに基づいて、このソリューションを提供します。
ssh -t you@Host /bin/bash --noprofile --norc
デニスWは--norcオプションを提供しましたが、これはうまくいかないと誰かが言っていました。
起動ファイルを無効にするオプションについては、「man bash」または「man(your Shell)」を実行してください。問題を修正するために必要な時間だけ、忌まわしいシェルを使用する必要があります。
サーバーにログインする他の方法はプロファイルなしです、以下のコマンドを見つけてくださいssh -t user@Host bash --noprofile
PEMファイルを使用し、他のユーザーを使用しないAWSの場合ssh -ti "YOUR-PEM-FILE-NAME.pem" ec2-user@YOUR-IP-ADDRESS bash --noprofile
お役に立てれば!